所以我有一个充满json文件的文件夹,他们有一行,我想删除。由于我是批处理脚本的新手,我遇到了一些问题。这就是我到目前为止所做的:
setlocal EnableDelayedExpansion
ren *.json *.old
for %%x in (*.old) do (
set filename=%%~nx
set extension=.json
set finalname=%filename%%extension%
type %%x | findstr /v string %%x >> %finalname%
del %%x
)
但这一切似乎都无法奏效。例如,当我回显%finalname%时,它是空的,因此连接似乎不起作用。我还需要做的是确保文件名中的空格得到处理。
答案 0 :(得分:1)
正如npocmaka指出的那样,你可以在变量引用中使用正确的延迟扩展语法解决代码中的问题,或者你可以直接删除变量:
ren *.json *.old
for %%x in (*.old) do (
type "%%x" | findstr /v /c:"string" > "%%~nx.json"
del "%%x"
)
不要在变量中存储所需的值,只需使用值。
答案 1 :(得分:0)
要使用延迟展开进行展开,请使用!
代替%
setlocal EnableDelayedExpansion
ren *.json *.old
for %%x in (*.old) do (
set "filename=%%~nx"
set "extension=.json"
set "finalname=!filename!!extension!"
type "%%x" | findstr /v "string" "%%x" >>"!finalname!"
del "%%x"
)
但是......你想用这条线实现的目标:
type %%x | findstr /v string %%x >> %finalname%
- (当您使用管道内容时,您不需要指向文件)?