2015-10-07 58 views
1

所以我有一个文件夹完整的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

要与延迟扩展用!代替%

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

+0

谢谢!这工作。不仅是!而且“”是问题。非常感谢! – user5417542

+1

所以我认为'findstr/v“字符串”“%%〜fx”>>“!filename!”'就足够了(由于性能原因,我会避开管道)...... – aschipfl

1

由于npocmaka点,你可以在你的代码正确的延迟扩展语法解决问题的变量引用,或者您也可以直接删除变量:

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

不是存储的值,你需要内部变量,只需使用这些值。