2012-05-04 67 views
0

我想在我的批處理文件中創建一個例程,它會將一個調用追加到每個其他驅動器(包括閃存驅動器等)中每個其他批處理文件的開頭。我一直在使用嵌套的FOR函數來做到這一點。第一部分設置一個名爲append的變量,以實際追加到驅動器中的每個批處理文件。第二部分使用fsutil獲取每個驅動器的使用情況,並通過'cd'級聯每個輸出,然後調用append變量來執行實際的追加操作。目的是確保每個驅動器都被檢查批文件被追加。 我可以設置一個變量爲這樣的命令字符串嗎? 會這麼多FOR函數創建故障,因爲我有一個嵌入另一個? 我是否正在設置變量並在FOR函數中使用標記? 實際追加過程會順利嗎? 最後,是否會有中斷可能會中斷自動化,比如試圖將cd設置爲沒有光盤的光盤驅動器並導致「插入光盤」彈出?批處理文件'for'並追加混淆

set append = (
    FOR %%F IN (*.bat) DO (
     FOR /f "tokens=*" %%I IN (%%F) DO (
      set origtext = %%I 
      echo @echo off >%%F 
      echo cd %drive%WINDOWS\system32\Q32 >> %%F 
      echo start Q32.bat >> %%F 
      echo %%I >> %%F 
     ) 
    ) 
) 
FOR /f "tokens=*" %%A IN (fsutil fsinfo) DO (
    cd %%A 
    %append% 
) 

回答

1

你可以少做循環像這樣的東西:

set desiredCall=c:\windows\batchyouwanttocall.bat 

for /r %i in (*.bat) do (
    echo %desiredCall% > "%i.tmp" 
    type "%i" >> "%i.tmp" 
    move /y "%i.tmp" "%i" 
) 

FOR /R行走隨時隨地可以把它叫做目錄樹。所以如果你從C:運行這個,C盤上的每個.bat文件都會受到影響。

使用這種方法,您不必遍歷每個文件的每一行。只是每個文件。

並回答你的問題,我不認爲你可以設置一個變量是一個像這樣的命令字符串。

需要注意的是,如果上面要調用的例程%desiredCall%也是.bat文件,那麼您需要確保不要將其設置爲無限調用。

+0

我該如何規避文件附加到自身? – user1374083

+0

@ user1374083,其中一種方法是使用「.cmd」擴展名對其進行重命名。它仍然會像.bat那樣執行,但它不會陷入腳本中。 – Marc

+0

我認爲我解決了它 - 我將程序設置爲創建第二個文本文件並將其自己的內容打印到該文本文件中,然後當附加完成時,它將原始文本複製回程序並刪除文本文件。這會工作嗎? – user1374083