我需要将文本文件中很长的一行(可能有数十万个字符)分成较短的行(8184 个字符),并且无法.bat
处理此任务。
不过,我找到了一个 PowerShell 解决方案(这里):
(gc in.txt) -replace ".{750}" , "$&`r`n" | sc out.txt
当我打开 PowerShell 窗口并粘贴稍微调整过的版本、在哪里并执行它时,此方法有效750
,8184
但是当我.bat
像这样将其包含在我的...中时:
powershell -Command "(gc test.txt) -replace '.{8184}' , '$&`r`n' | sc temp.txt"
...它不能按预期工作并插入...
`r`n
... 每 8184 个字符之后(我无法以内联格式显示这一点,抱歉)。
我尝试利用:
powershell -Command "& {(gc test.txt) -replace '.{8184}' , '$&`r`n' | sc temp.txt}"
powershell -Command "(gc test.txt) -replace '.{8184}' , '$&\r\n' | sc temp.txt"
powershell -Command "(gc test.txt) -replace '.{8184}' , '$&VbCrLf' | sc temp.txt"
但我无法让它工作。这里有什么问题?
答案1
`r`n
是换行符的正确转义序列,但问题是单引号字符串不会像双引号字符串那样进行转义序列求值或变量插值,因此文字转义序列最终会出现在您的输出中。我们需要将字符串用双引号传递给 PowerShell,这有点棘手,因为我们cmd.exe
还必须处理 's 的解释。每个理解的双引号使用四个双引号即可完成此工作:
powershell -Command "(gc test.txt) -replace '.{8184}' , """"$&`r`n"""" | sc temp.txt"