2015-09-22 32 views
0

我對批處理相對比較陌生。我寫的小腳本,進入一些特定的目錄和執行命令(令):帶參數的批處理腳本

FOR /d %%p IN (Test_*) do FOR /d %%s IN (%%p\*) do make clean --directory "%%s" 

所以TEST_ *是指與TEST_開始的所有目錄。

我想也把這個腳本的說法,讓我把這個命令還當我指定一個目錄,例如,像這樣:

myScript.bat Test_XY

代碼應該是這樣的:

SET Modus=%1 
IF "%Modus%"==""(
FOR /d %%p IN (Test_*) do FOR /d %%s IN (%%p\*) do make clean --directory "%%s" 
) 
ELSE 
FOR /d %%p IN (%1) do FOR /d %%s IN (%%p\*) do make clean --directory "%%s" 

,但我得到了錯誤的語法無效

我做錯了什麼?

+0

有一個空間,在一行缺少'IF 「%作案%」 == 「」('(之間' 「」'和'(');和'ELSE'必須與上面'''在同一行(用空格隔開); – aschipfl

回答

0

Unlike other variants of the FOR command you must include a wildcard (either * or ?) in the 'folder_set' to get consistent results returned. http://ss64.com/nt/for_d.html

SET Modus=%1 
IF "%Modus%"=="" (
    FOR /d %%p IN (Test_*) do (
     FOR /d %%s IN (%%p\*) do make clean --directory "%%s" 
    ) 
) ELSE (
    FOR /d %%p IN (%Modus%) do (
     FOR /d %%s IN (%%p\*) do make clean --directory "%%s" 
    ) 
) 

我想重寫此:

set "modus=%1" 
if "%modus%"=="" (
    for /f "tokens=*" %%p in ('dir /b /a:d "Test_*"') do (
     echo make clean --directory "%%p" 
    ) 
) else (
    for /f "tokens=*" %%p in ('dir /b /a:d "%modus%"') do (
     echo make clean --directory "%%p" 
    ) 
) 

更簡單和緊湊的

set "modus=%1" 
if "%modus%"=="" set "modus=Test_*" 
for /f "tokens=*" %%p in ('dir /b /a:d "%modus%"') do (
    echo make clean --directory "%%p" 
) 
0

,如果你想使用多個參數,那麼使用%1%2%3更改您的代碼

set var=%1 
IF [%1]==[] set "var=Test_*"  
FOR /d %%p IN (%var%) do FOR /d %%s IN (%%p\*) do make clean --directory "%%s" 

,並調用批處理腳本像

myscript.bat Test_XY 

%1是第一個參數..。 .. 等等。

+0

好的,這是工作。但我還想保留命令對所有目錄執行它(當我不帶參數地調用腳本時)? – JohnDoe

+0

edited ..檢查編輯.. –

+0

這與參數工作,但如果我運行腳本沒有參數,我得到的錯誤:'var不被識別爲內部或外部命令' – JohnDoe

0

要執行您的批處理文件,如圖所示,在特定的文件夾中, 在命令行上傳遞文件夾 - 至少有這兩個選項。

1:

@echo off 
cd /d "%~1" 
FOR /d %%p IN (Test_*) do FOR /d %%s IN (%%p\*) do make clean --directory "%%s" 

2:

@echo off 
pushd "%~1" 
FOR /d %%p IN (Test_*) do FOR /d %%s IN (%%p\*) do make clean --directory "%%s" 
popd