1

尊敬的专家您好!

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

if "%*"=="" findstr "^::" "%~f0"&goto :eof

如果没有参数用双引号括起来,这很好用。例如:

test.bat par1 par2 ... --- works

test.bat "par 1" par2 ... --- fails

我的问题是:

1)有什么办法可以克服这个问题,而不是要求使用非双引号符号来指定“长”参数,然后使用字符串替换?

2) 我可以使用“if”来比较两个同时包含双引号和空格的字符串吗?

非常感谢您及时明确的答复。

4

3 回答 3

2

~ 会去掉双引号,但对 %* 不起作用,但如果你只是想知道是否没有参数,只需检查 %1 就足够了

if "%~1"==""

您可能需要先调用 setlocal ENABLEEXTENSIONS 以确保扩展已打开(~ 需要)

于 2009-12-04T08:14:15.950 回答
0

谢谢你,安德烈斯。这里还有两段代码来检查传递参数的存在和数量:

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 包含所需数量的参数。

希望这对某人有帮助!

于 2009-12-05T05:09:02.850 回答
0

由于安德烈的回答未能正确计算参数,这是一种有效的方法,即使有超过 9 个参数(它甚至保留原始参数,所以仍然通过将ing 移动到子例程中来%1指向第一个):shift

@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
于 2009-12-06T14:16:25.203 回答