You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将用于IPFS固定的Bash xargs命令转换为Windows PowerShell命令

Windows PowerShell中批量IPFS固定CID的解决方案

有一个文本文件,每行包含文件描述和对应的IPFS CID,格式如下:

"description of a file" "IPFS CID"  
description1 CID1.....shnpnhzuquz3ho7vvabqjyide  
description2 CID2.....keg4rklbzenppnyrjk554h5ru  

Linux下可以用以下命令批量固定每行对应的CID:

cat file.txt | xargs -L1 bash -c 'ipfs pin add $1'

在Windows PowerShell中尝试了以下命令:

cat file.txt | %{ipfs pin add $_}

但出现错误:

Error: invalid path "description1 CID1.....shnpnhzuquz3ho7vvabqjyide": selected encoding not supported  
Error: invalid path "description2 CID2.....keg4rklbzenppnyrjk554h5ru": selected encoding not supported  

问题原因

你之前的命令把**整行内容(描述+CID)**作为参数传给了ipfs pin add,但这个命令只需要单独的CID,整行包含的描述文本导致被识别为无效路径,因此报错。

解决方案

根据文本文件的两种格式(带引号的描述/不带引号的描述),提供两种处理方式:

1. 处理不带引号的行(描述无空格)

如果每行的描述和CID仅用空格分隔,且描述本身不含空格,直接分割行内容取最后一个元素(即CID):

Get-Content file.txt | ForEach-Object {
    # 按任意空白字符分割行,取最后一段作为CID
    $cid = ($_ -split '\s+')[-1]
    ipfs pin add $cid
}

2. 兼容带引号的行(描述含空格)

如果存在带引号的描述行(如第一行格式),用正则匹配提取引号内的CID,同时兼容不带引号的行:

Get-Content file.txt | ForEach-Object {
    if ($_ -match '"[^"]+"\s+"([^"]+)"') {
        # 匹配带双引号的行,提取第二个引号内的CID
        $cid = $matches[1]
    } else {
        # 处理不带引号的行,取最后一段
        $cid = ($_ -split '\s+')[-1]
    }
    ipfs pin add $cid
}

说明

  • Get-Content是PowerShell中读取文件的标准命令(cat是它的别名)
  • ForEach-Object(别名%)用于遍历每行内容
  • -split '\s+'会将行内容按任意数量的空白字符分割成数组
  • 正则表达式"[^"]+"\s+"([^"]+)"专门匹配"描述" "CID"格式的行,捕获组([^"]+)提取出CID

内容的提问来源于stack exchange,提问作者valen320

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:52:57