如何批量处理变量 - 从所有文件中删除行

How to deal with Variables in Batch - Removing line from all files

所以我有一个充满 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% 时,它是空的,因此连接似乎不起作用。此外,我还需要确保处理文件名中的空格。

要使用延迟扩展进行扩展,请使用 ! 而不是 %

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% -(当您使用管道内容时,您不需要指向文件)?

正如 npocmaka 指出的那样,您可以通过在变量引用中使用正确的延迟扩展语法来解决代码中的问题,或者您可以直接删除变量:

ren *.json *.old
for %%x in (*.old) do (
    type "%%x" | findstr /v /c:"string" > "%%~nx.json"
    del "%%x"
)

无需将您需要的值存储在变量中,只需使用这些值即可。