首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Windows脚本中读取命令行参数时,是否有一种方法可以转义逗号字符?

在Windows脚本中读取命令行参数时,是否有一种方法可以转义逗号字符?
EN

Stack Overflow用户
提问于 2015-04-24 12:00:11
回答 2查看 1K关注 0票数 1

我试图从命令行读取多个输入参数。最后一个应该是逗号分隔的列表,但是脚本只能读取逗号之前的第一个单词。

也就是说,当我调用脚本时:test.cmd a b c d,e,f

%4d的形式出现,而我希望它被解读为d,e,f

我已经查了不少资料来找出这一点,但看来Windows中的命令行参数不能被操纵(令牌化等)。并按原样传递给脚本。这是真的吗?在从命令行读取输入时,是否没有办法转义?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-24 12:05:28

引用您的参数,然后使用%~1%~2等检索它们。如果您使用test.cmd a b c "d,e,f"%~4将包含d,e,f

编辑:下面是我在下面的第二个评论中描述的解决方法:

代码语言:javascript
复制
@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%

示例会话:

票数 5
EN

Stack Overflow用户

发布于 2015-04-24 15:11:29

下面的方法允许您分离按逗号分组的任意数量的参数:

代码语言:javascript
复制
@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]!

输出示例:

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

https://stackoverflow.com/questions/29847008

复制
相关文章

相似问题

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