Powershell替换 - 如何在80个字符处避免换行

时间:2013-11-01 14:28:41

标签: powershell batch-file command

在批处理文件中,我需要在文件中更改## token ##(只是我自己的占位符)的所有实例,其中包含脚本中早期变量的值(%tokenvar%),并输出结果到一个文件。从这里的答案我想出了PowerShell:

type file.json|powershell -Command "$input|ForEach-Object{ $_ -replace \"##token##\", \"%tokenvar%\" }" > file.2.json

问题是生成的文件被包裹在80个字符中,我不需要它!

我该怎么做?

3 个答案:

答案 0 :(得分:1)

在这种情况下您不需要使用Out-String,因为Out-File也有Width参数:

... | Out-File File.2.json -Width 300"

确保| Out-File ...是PowerShell命令的一部分。

答案 1 :(得分:1)

问题是PowerShell(>)中的重定向操作符将变为Out-File,宽度为80个字符。您可以使用具有任意大宽度的Out-File(我更喜欢10k),或管道设置内容(这将更慢)。您还可以将结果分配给变量,并使用[IO.File] :: WriteAllText执行更新。

答案 2 :(得分:0)

您可以直接在批处理文件中执行此操作,而无需使用Powershell:

@echo off
setlocal DisableDelayedExpansion

for /F "delims=" %%a in (file.json) do (
   set "line=%%a"
   setlocal EnableDelayedExpansion
   echo !line:##token##=%tokenvar%!
   endlocal
)

此批处理文件假设file.json中没有空行,并且%tokenvar%的值没有特殊的批处理字符。如果需要,这两点可以修复。