【发布时间】:2021-09-09 02:38:46
【问题描述】:
我遇到了一个有趣的问题。我正在使用 jq 从批处理脚本中缩小 JSON,我希望它替换它读取的文件。虽然可能有更好的解决方案,但它应该在纸面上起作用,但在实践中不起作用。
作品:
for /R %%f in (*.json) do (
ECHO Minifying JSON file "%%f"
(ECHO Hello) 1> "%%f"
)
输出文件:
Hello
表明重定向有效
for /R %%f in (*.json) do (
ECHO Minifying JSON file "%%f"
("path\to\jq" . --unbuffered --compact-output "%%f" && ECHO Hello) 1> "%%f"
)
输出文件:
Hello
显示 jq 产生输出
for /R %%f in (*.json) do (
ECHO Minifying JSON file "%%f"
"path\to\jq" . --unbuffered --compact-output "%%f"
)
CMD 窗口中的输出: 每个 JSON 文件的内容,已缩小(就像我想要的那样)
我正在尝试做什么
for /R %%f in (*.json) do (
ECHO Minifying JSON file "%%f"
("path\to\jq" . --unbuffered --compact-output "%%f") 1> "%%f"
)
输出文件:
如您所见,没有 JSON 存在,无论是缩小的还是其他的。
关于答案
@peak 给了a workaround using PowerShell。在我的情况下,我得出以下结论:
for /R %%f in (*.json) do (
ECHO Minifying JSON file "%%f"
powershell -Command "& {.\..\info\jq . --unbuffered --compact-output \"%%f\"|Set-Content \"%%f\"}"
)
这会输出正确的、缩小的 JSON。 我在这里做的是调用 PowerShell 来处理缩小,并使用 Set-Content cmdlet。
【问题讨论】:
标签: windows batch-file jq overwrite io-redirection