问候,亲爱的专家!
我想在我的批处理脚本中检查参数(或参数)的存在情况:
if "%*"=="" findstr "^::" "%~f0"&goto :eof
如果没有任何参数包含在双引号中,这工作正常。 例如:
test.bat par1 par2 ... --- works
但
test.bat "par 1" par2 ... --- fails
我的问题是:
1)有什么办法来克服这个,而不是要求使用非双引号符号指定“长”参数,然后使用stringreplace?
2)我可以使用“if”来比较两个包含双引号和空格的string吗?
你的迅速和明确的答复将非常感激。
〜将删除双引号,但不能在%*上工作,但是如果你只是想知道是否没有参数,只要检查%1就足够了
if "%~1"==""
您可能需要首先调用setlocal ENABLEEXTENSIONS来确保扩展(需要〜)
谢谢Andres。 这里有两个代码来检查传递参数的存在和数量:
set ArgumentString=%* if not defined ArgumentString findstr "^::" "%~f0"&goto :eof if "%ArgumentString:"=%"=="" findstr "^::" "%~f0"&goto :eof
set NumberOfArguments=0 for /l %%N in (1,1,9) do ( call set CurrentArgument=%%%%N if defined CurrentArgument set /a NumberOfArguments += 1 ) if %NumberOfArguments% NEQ %N% findstr "^::" "%~f0"&goto :eof
这里变量N包含所需的参数个数。
希望这有助于某人!
既然Andrey的答案不能正确地计算参数,那么即使有超过9个参数(甚至保留原来的参数),这个方法也可以工作,所以%1
仍然指向第一个方法,即移动到子程序中) :
@echo off call :get_num_args %* echo %NumArgs% goto :eof :get_num_args set NumArgs=0 :loop if not [%1]==[] (set /a NumArgs+=1) else (goto :eof) shift goto loop goto :eof