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

时间:2015-10-07 08:56:14

标签: windows batch-file cmd concatenation

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

2 个答案:

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