2017-04-09 62 views
0

我想對批處理文件做簡單的檢查。 argCount包含正確的數字,但我在比較變量和數字時遇到了麻煩。如果參數的數量不等於3並且轉到文件的末尾,我想顯示幫助。
我想:
if not %argCount% == 3
if not %argCount%=='3'
if not '%argCount%'=='3'
if %argCount% NEQ 3
但按預期工作沒有這些選項...大多數的選項,我試着總是告訴我幫助的消息無論參數的數量,一些如果我將3個參數傳遞給腳本(非常奇怪),則選項會顯示幫助消息,而不會顯示前3行。檢查批處理文件參數的數量

@echo off 

set argCount=0 
for %%x in (%*) do (
    set /A argCount+=1 
) 
if not %argCount% == 3 (
    echo This script requires the next parameters: 
    echo - absolute path to file 
    echo - filter (explanation) 
    echo - true or false (explanation) 
    echo Examples: 
    echo start.bat full\path\to\the\file.ext test true 
    echo start.bat full\path\to\the\file.ext nof false 
    goto end 
) 

REM some another code 

:end 
+2

你的')回波'被視爲'if'塊的末尾。使用括號內的插入符號將所有')'全部轉義出來。另外,除非你有明確的理由,否則[總是使用'setlocal'](https://stackoverflow.com/a/15659309/1683264);如果你使用'goto:EOF'或者'exit/b',你可以在腳本結尾去掉':end'標籤。 – rojo

+0

@rocknow將批處理文件'start.bat'命名爲覆蓋Windows命令解釋器的內置命令__START__是一個非常糟糕的主意。所以強烈建議給該批處理文件一個不同於'start.bat'的名稱。 – Mofi

回答

2

爲什麼不僅簡化了結構:

IF NOT "%~3"=="" IF "%~4"=="" GOTO START 
ECHO This script requires the next parameters: 
ECHO - absolute path to file 
ECHO - filter (explanation) 
ECHO - true or false (explanation) 
ECHO Examples: 
ECHO "%~nx0" "full\path\to\the\file.ext" test true 
ECHO "%~nx0" "full\path\to\the\file.ext" nof false 
GOTO :EOF 

:START 
+0

因爲__START__也是Windows命令解釋程序的內置命令,所以除了使用'START'作爲標籤外,這是一個好主意。 「START」標籤起作用。但是,如果在批處理文件中同時使用命令__START__,則將該字符串用作標籤是不好的,因爲搜索* start *時帶有含義標籤或含義命令變得困難。 「BEGIN」作爲標籤會更好。 – Mofi

+0

真棒,它的作品! @Compo能否解釋第一條線的工作原理(我的意思是條件,而不是goto)? – rocknow

+0

如果第三個參數不爲空,(存在),並且第四個參數爲空(不存在),則啓動腳本的主要部分。任何其他情況在退出前都會收到說明。 _(順便提一句,你可能希望在GOTO:EOF之前添加一個'TIMEOUT -1 1> NUL',這樣最終用戶有時間閱讀該消息)_。 – Compo