PowerShell使用-ChildPath命名文件时起始值设为1报错问题
解决PowerShell CSV转TXT时文件名从1开始的问题
错误原因
你遇到的错误是因为字符串格式化语法里的{1:D2}要求传入第二个参数(索引从0开始),但你的格式化命令-f $i++只传了一个参数,索引1超出了参数列表范围,所以报错。
正确修改方案
要让文件名从1开始,不需要修改占位符的索引(依然用{0:D2}),只需要调整计数器的初始值或递增时机:
方法1:修改计数器初始值
把计数器$i的初始值设为1,保持后置递增$i++,这样第一个文件就会用1作为编号:
$outputfolder = 'C:\generacionaudios\500\textfiles' Import-Csv C:\generacionaudios\500\500.csv -Encoding utf8 | ForEach-Object { $i = 1 } { $path = Join-Path $outputfolder -ChildPath ('fileName-Part{0:D2}.txt' -f $i++) $_ | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | Set-Content $path -Encoding UTF8 }
方法2:使用前置递增运算符
保持计数器初始值为0,改用前置递增++$i,这样第一次循环时会先把$i加1再代入格式化:
$outputfolder = 'C:\generacionaudios\500\textfiles' Import-Csv C:\generacionaudios\500\500.csv -Encoding utf8 | ForEach-Object { $i = 0 } { $path = Join-Path $outputfolder -ChildPath ('fileName-Part{0:D2}.txt' -f ++$i) $_ | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | Set-Content $path -Encoding UTF8 }
额外优化建议
如果你的纯文本文件只需要每行的原始字符串内容(而非CSV格式),可以简化转换逻辑,不用ConvertTo-Csv,直接输出对象的指定列内容(假设CSV目标列名为Content):
$outputfolder = 'C:\generacionaudios\500\textfiles' Import-Csv C:\generacionaudios\500\500.csv -Encoding utf8 | ForEach-Object { $i = 1 } { $path = Join-Path $outputfolder -ChildPath ('fileName-Part{0:D2}.txt' -f $i++) $_.Content | Set-Content $path -Encoding UTF8 }
内容的提问来源于stack exchange,提问作者eera5607
相关产品推荐
相关产品推荐

