2012-05-21 72 views
1

我正在處理一個批處理文件,以用作已編寫的某些數據處理模塊的包裝,目標是能夠根據需要並行運行一些數據並處理其他數據/處理權力允許。底層模塊需要一個輸入(包含在雙引號中的路徑),並且可選地包含雙引號和/或一組標誌中的另一個路徑,並且我正在試圖弄清楚如何測試這些輸入。我目前有批處理文件:解析命令行輸入

:TEST_PARAMS 
REM Make sure parameters are correct; if not, display a usage message 
IF NOT "%1"=="" (SET SUBBASENAME=%1 
) ELSE (
    GOTO :USAGE 
) 
IF NOT "%2"=="" (SET ATLASBASENAME=%2 
) ELSE (
    SET ATLASBASENAME=%DEFAULTATLAS% 
) 
IF NOT "%3"=="" (SET FLAGS=%3 
) ELSE (
    SET FLAGS="" 
) 
GOTO :START_SVREG 

這似乎解析正確的東西,如果東西輸入正確的順序。但是,我還想檢查標誌(它將前綴' - ')是否作爲第一個或第二個輸入彈出,如果是,則顯示使用消息/根據需要正確設置變量。我想最簡單的方法是看看這些字符串的第一個字符是否是' - ',但我找不到任何方法來做到這一點。我發現了一段代碼,通過用空字符串替換子字符串來檢查字符串是否包含某個子字符串,然後查看結果字符串是否與原始字符串相同,但這不起作用,因爲人們可能在其他地方合法地使用連字符在他們的路徑中。有沒有辦法檢查字符串的第一個字符是否與批處理文件中的給定字符相匹配,或者更好地執行我想要的操作?

回答

1

你。可以將參數(在命令行HELP SET類型來獲取信息有關的子字符串操作)轉移到一個環境變量,然後使用一組串操作來看看第一個字符。

@echo off 
set "var=%~1" 
if defined var if "%var:~0,1%" equ "-" echo arg 1 is a flag 
0

您確實不需要在任何批處理文件參數中檢查「 - 」,因爲作爲批處理文件創建者,您將知道哪些命令可以處理或不處理。意思是如果使用「-b」,那麼你知道如何處理它,或者如果用戶通過「-t」,你將知道如何處理。在你的批處理文件中,你只需要處理所有的參數,不管它們的順序如何,在你的批處理文件中,你將有一些部分來處理它。這裏是一個可以處理任何數量的帶參數的一個例子批處理文件「 - 」或「/」使用他們:

@echo off 

if [%1]==[] goto usage 
:CHECKFORSWITCHES 
@echo Execute the Command 
IF '%1'=='/param1' GOTO PARAM1 
IF '%1'=='-param2' GOTO PARAM2 
IF '%1'=='/param3' GOTO PARAM3 
IF '%1'=='-param4' GOTO PARAM4 
IF '%1'=='/param5' GOTO PARAM5 
goto :eof 

:PARAM1 
@echo This is Param1 
set var=%1 
set var2=%var:~0,1% 
echo %var2% 
SHIFT 
goto :CHECKFORSWITCHES 
:PARAM2 
@echo This is Param2 
SHIFT 
goto :CHECKFORSWITCHES 
:PARAM3 
@echo This is Param3 
SHIFT 
goto :CHECKFORSWITCHES 
:PARAM4 
@echo This is Param4 
set var=%1 
set var2=%var:~0,1% 
echo %var2% 
SHIFT 
goto :CHECKFORSWITCHES 
:PARAM5 
@echo This is Param5 
SHIFT 
goto :CHECKFORSWITCHES 
:usage 
@echo Usage: %0 ^<Write your command here^> 
exit /B 1 

以上腳本還檢查任何參數的第一個字符,所以如果你需要使用代碼分開,你確定可以使用它,但我認爲這不是一個好辦法。

以上,如果你需要編寫基於某些邏輯「 - 」或「/」,只需使用IF%VAR2%=='/」 GOTO XXX,你可以做任何你正在尋找

+0

感謝您的答覆。我」 m使用批處理文件作爲一種用Matlab編譯的模塊的接口,所以它實際上並沒有對標記做任何事情 - 只要它們存在就會通過它們。 ach模塊進行自己的檢查,但我希望在調用它們之前能夠檢查,以便用戶不會收到使用消息。 – ackrause