在 Windows 脚本中读取命令行参数时,有没有办法转义逗号字符?
When reading command line arguments in Windows script, is there a way to escape the comma character?
我正在尝试从命令行读取多个输入参数。最后一个应该是逗号分隔的列表,但脚本只能读取逗号前的第一个单词。
也就是我调用脚本的时候:test.cmd a b c d,e,f
%4
以 d
的形式出现,而我希望将其读作 d,e,f
我查阅了很多资源来解决这个问题,但似乎 Windows 中的命令行参数无法被操作(标记化等)并按原样传递给脚本。这是真的?在从命令行读取输入时没有办法转义 , 吗?
引用您的论点,然后用 %~1
、%~2
等检索它们。如果您这样做 test.cmd a b c "d,e,f"
,%~4
将包含 d,e,f
。
编辑:这是我在下面第二条评论中描述的解决方法:
@echo off
setlocal
echo 1: %~1
echo 2: %~2
echo 3: %~3
:loop
if not "%~4"=="" (
if defined four ( set "four=%four%,%~4" ) else set "four=%~4"
shift /4
goto loop
)
echo 4: %four%
示例会话:
下面的方法允许您用逗号分隔任意数量的参数:
@echo off
setlocal EnableDelayedExpansion
rem Get command line arguments
set "args=%*"
set n=0
for %%a in ("%args: =" "%") do (
set /A n+=1
set "arg[!n!]=%%~a"
)
echo Argument 4: %arg[4]%
rem Show all arguments given
echo/
for /L %%i in (1,1,%n%) do echo %%i- !arg[%%i]!
输出示例:
C:\> test.bat a b c d,e,f o,p,q,r x,y,z
Argument 4: d,e,f
1- a
2- b
3- c
4- d,e,f
5- o,p,q,r
6- x,y,z
我正在尝试从命令行读取多个输入参数。最后一个应该是逗号分隔的列表,但脚本只能读取逗号前的第一个单词。
也就是我调用脚本的时候:test.cmd a b c d,e,f
%4
以 d
的形式出现,而我希望将其读作 d,e,f
我查阅了很多资源来解决这个问题,但似乎 Windows 中的命令行参数无法被操作(标记化等)并按原样传递给脚本。这是真的?在从命令行读取输入时没有办法转义 , 吗?
引用您的论点,然后用 %~1
、%~2
等检索它们。如果您这样做 test.cmd a b c "d,e,f"
,%~4
将包含 d,e,f
。
编辑:这是我在下面第二条评论中描述的解决方法:
@echo off
setlocal
echo 1: %~1
echo 2: %~2
echo 3: %~3
:loop
if not "%~4"=="" (
if defined four ( set "four=%four%,%~4" ) else set "four=%~4"
shift /4
goto loop
)
echo 4: %four%
示例会话:
下面的方法允许您用逗号分隔任意数量的参数:
@echo off
setlocal EnableDelayedExpansion
rem Get command line arguments
set "args=%*"
set n=0
for %%a in ("%args: =" "%") do (
set /A n+=1
set "arg[!n!]=%%~a"
)
echo Argument 4: %arg[4]%
rem Show all arguments given
echo/
for /L %%i in (1,1,%n%) do echo %%i- !arg[%%i]!
输出示例:
C:\> test.bat a b c d,e,f o,p,q,r x,y,z
Argument 4: d,e,f
1- a
2- b
3- c
4- d,e,f
5- o,p,q,r
6- x,y,z