我想将可选参数传递给脚本:
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"之后出现。但是如何使用脚本呢?
答案 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解析模板的论点。无论您定义了多少个可选参数,大多数代码都保持不变。它支持未使用参数的默认值,并且非常强大。