簡體   English   中英

批處理文件:解析命令行輸入

[英]Batch file: parsing command line inputs

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

: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

如果按正確的順序輸入內容,這似乎可以正確解析所有內容。 但是,我還想檢查標志(以“-”開頭)是否作為第一或第二輸入彈出,如果是,則顯示使用消息/根據需要正確設置變量。 我認為最簡單的方法是查看這些字符串的第一個字符是否為'-',但是我找不到任何方法。 我找到了一段代碼,檢查該字符串是否包含某個子字符串,方法是將子字符串替換為空字符串,然后查看結果字符串是否與原始字符串相同,但這無法正常工作,因為人們可能在其他地方合法地帶有連字符在他們的道路上。 有沒有一種方法可以檢查字符串的第一個字符是否與批處理文件中的給定字符匹配,或者是執行我想要的更好的方法?

您可以將參數傳遞給環境變量,然后使用SET子字符串操作查看第一個字符。 (從命令行鍵入HELP SET以獲得有關子字符串操作的信息)

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

您實際上不需要在任何批處理文件參數中都選中“-”,因為作為批處理文件創建者,您將知道可以處理或不處理哪些命令。 表示如果使用“ -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,您就可以做任何想要的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM