0

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

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

问题是生成的文件以 80 个字符包装,我不需要它!

我怎样才能做到这一点?

4

3 回答 3

1

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

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

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

于 2013-11-02T18:30:34.957 回答
1

问题是 PowerShell (>) 中的重定向运算符将变成宽度为 80 个字符的 Out-File。您可以使用任意大宽度的 Out-File(我更喜欢 10k),或通过管道连接到 Set-Content(这会更慢)。您还可以将结果分配给变量,并使用 [IO.File]::WriteAllText 执行更新。

于 2013-11-02T20:49:48.437 回答
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%没有特殊的批处理字符。如果需要,这两点可以固定。

于 2013-11-01T15:44:35.777 回答