2017-04-09 57 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

相关问题