Windows Shell脚本:检查包含双引号的批处理选项

问候,亲爱的专家!

我想在我的批处理脚本中检查参数(或参数)的存在情况:

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