亲爱的专家们,您好!
我想在我的批处理脚本中检查参数(或实参)字符串的存在:
if "%*"=="" findstr "^::" "%~f0"&goto :eof如果没有任何参数包含在双引号中,则可以很好地执行此操作。例如:
test.bat par1 par2 ... --- works但
test.bat "par 1" par2 ... --- fails我的问题是:
1)有没有办法克服这一点,而不是要求使用非双引号符号来指定"long“参数,然后使用字符串替换?
2)我是否可以使用"if“来比较同时包含双引号和空格的两个字符串?
您的及时和明确的答复将不胜感激。
发布于 2009-12-04 16:14:16
~将去掉双引号,但在%*上不起作用,但如果您只想知道是否没有参数,只需检查%1就足够了
if "%~1"==""您可能希望首先调用setlocal ENABLEEXTENSIONS以确保扩展处于打开状态(~需要)
发布于 2009-12-05 13:09:03
谢谢你,安德烈斯下面是另外两段代码,用于检查传递的参数是否存在和数量:
set ArgumentString=%*
if not defined ArgumentString findstr "^::" "%~f0"&goto :eof
if "%ArgumentString:"=%"=="" findstr "^::" "%~f0"&goto :eofset 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包含所需的参数数量。
希望这对某些人有帮助!
发布于 2009-12-06 22:16:25
由于安德烈的答案不能正确计算参数,这里有一种方法,即使参数超过9个也可以工作(它甚至保留了原始的参数,所以%1仍然通过将shifting移入子例程来指向第一个参数):
@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 :eofhttps://stackoverflow.com/questions/1844591
复制相似问题