使用引号和空格解析可选参数

时间:2016-11-01 15:31:34

标签: windows batch-file

我想将可选参数传递给脚本:

mybatfile.bat firstParameter -r 000 -m "Some message here"

我从不同的问题得到解决方案,但我对-m "Some message here"

有疑问
SET firstParameter=%1
SET message=""

SET roomNumber=""

SHIFT

:loop
IF NOT "%1"=="" (
    IF "%1"=="-r" (
        SET roomNumber=%2        
    )

    IF "%1"=="-m" (         
        set message=%~2
    )

    SHIFT
    GOTO :loop
)

%~2只获得单词的第一部分,因为它将每个单词视为另一个参数。 我也发现我可以在里面使用小黑客,就像那样

    for %%x in (%*) do (
        echo "%%~x"
    )

这里首先采取" %% ~x"在" -m"之后出现。但是如何使用脚本呢?

1 个答案:

答案 0 :(得分:3)

您误解了您的问题。 message参数周围的引号将保留空格文字。

但是你的无参数测试是错误的,而且你缺少一些SHIFT命令。

以下是对代码的最小修正。

@echo off
setlocal
set firstParameter=%1
set "message="
set "roomNumber="

:loop
shift
if not "%~1"=="" (
  if "%~1"=="-r" (
    set roomNumber=%2
    shift
  )
  if "%~1"=="-m" (
    set message=%2
    shift
  )
  goto :loop
)

echo firstParameter = %firstparameter%
echo roomNumber     = %roomNumber%
echo message        = %message%

样本用法:

C:>mybatfile firstParameter -r 000 -m "Some message here"
firstParameter = firstParameter
roomNumber     = 000
message        = "Some message here"

你真的应该考虑我在https://stackoverflow.com/a/8162578/1012053解析模板的论点。无论您定义了多少个可选参数,大多数代码都保持不变。它支持未使用参数的默认值,并且非常强大。