2015-10-07 35 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" 
) 

不是存儲的值,你需要內部變量,只需使用這些值。