首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows Shell脚本:检查包含双引号的批处理选项

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

Stack Overflow用户
提问于 2009-12-04 11:03:38
回答 3查看 1.6K关注 0票数 1

亲爱的专家们,您好!

我想在我的批处理脚本中检查参数(或实参)字符串的存在:

代码语言:javascript
复制
if "%*"=="" findstr "^::" "%~f0"&goto :eof

如果没有任何参数包含在双引号中,则可以很好地执行此操作。例如:

代码语言:javascript
复制
test.bat par1 par2 ... --- works

但

代码语言:javascript
复制
test.bat "par 1" par2 ... --- fails

我的问题是:

1)有没有办法克服这一点,而不是要求使用非双引号符号来指定"long“参数,然后使用字符串替换?

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

您的及时和明确的答复将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2009-12-04 16:14:16

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

代码语言:javascript
复制
if "%~1"==""

您可能希望首先调用setlocal ENABLEEXTENSIONS以确保扩展处于打开状态(~需要)

票数 2
EN

Stack Overflow用户

发布于 2009-12-05 13:09:03

谢谢你,安德烈斯下面是另外两段代码,用于检查传递的参数是否存在和数量:

代码语言:javascript
复制
set ArgumentString=%*
if not defined ArgumentString findstr "^::" "%~f0"&goto :eof
if "%ArgumentString:"=%"=="" findstr "^::" "%~f0"&goto :eof

代码语言:javascript
复制
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包含所需的参数数量。

希望这对某些人有帮助!

票数 0
EN

Stack Overflow用户

发布于 2009-12-06 22:16:25

由于安德烈的答案不能正确计算参数,这里有一种方法,即使参数超过9个也可以工作(它甚至保留了原始的参数,所以%1仍然通过将shifting移入子例程来指向第一个参数):

代码语言:javascript
复制
@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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1844591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档