2014-11-07 88 views
0

我想寫一個Windows批處理腳本,通過一堆文件夾來運行2個程序。我不是shell腳本專家,但我盡我所能。在子文件夾中運行程序

這裏就是我想通過每個文件夾運行...

輸入的程序1是一個.extension1文件然後產生,然後通過程序2運行產生什麼,我需要一個.extension2文件。

在我運行該腳本之前,我進入了該文件夾。程序被複制到文件夾,因爲它們只在當前工作目錄中工作。

copy C:\program1 . 
copy C:\program2 . 
for %i in (*.extension1) do program1 "%i"  
for %i in (*.extension2) do program2 "%i" 

上面顯示的數據文件夾中包含了數百個,我需要在運行該程序的文件夾。我希望能夠做到這一點在一個大的批處理腳本。

回答

0
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir\one" 
PUSHD "%sourcedir%" 
FOR /r %%a IN (*.ext1) DO (
PUSHD "%%~dpa" 
ECHO(c:\program1 "%%~nxa" 
popd 
) 
popd 
GOTO :EOF 

您需要更改sourcedir的設置以適合您的情況。

在所有可能的情況下,這就是所有你需要的 - 或者至少,這是一個框架。

請注意,該例程將簡單地ECHO所需的命令。這允許無害的測試(在代表性的子樹上)確保該過程應該在整個樹上工作。

更改ECHO(c:\program1c:\program1每個.ext1文件中的子樹應該執行的第一個程序。程序檢查文件是否與可執行文件存在於同一個目錄中是不尋常的 - 如果它不會取得路徑,那麼將假定「當前目錄」。

您不會說程序program1是否從whatever.ext1生成名爲whatever.ext2的文件,或者它是否生成somethingradicallydifferent.ext2。很可能,將使用相同的名稱。

如果是這樣的情況,則運行所述第二程序,只需添加後

ECHO(c:\program1 "%%~nxa" 


ECHO(c:\program2 "%%~na.ext2" 

否則,簡單地重複整個塊,改變ext1ext2

(我假設你可以弄清楚我已經縮寫了擴展名)

如果,離機會程序(一個或多個)必須在同一目錄下,然後用

echo n|C:\program1 . >nul 2>nul 
ECHO(program1 "%%~nxa" 

更換

ECHO(c:\program1 "%%~nxa" 

(和同上的方案2,很明顯)。這裏的necho編入copy,這樣copy只會發生一次。這可能會有所改進,但從99年開始,它可能只是理論上的要求。9999%可能執行c:\program?會很愉快地工作。

相關問題