Batch file 变量循环和批处理文件中的参数之间的行为不同,参数可以';不能在循环中传递

Batch file 变量循环和批处理文件中的参数之间的行为不同,参数可以';不能在循环中传递,batch-file,arguments,Batch File,Arguments,我试图将批处理文件参数提取为3个字符串。我首先尝试使用一个变量,然后将其拆分为3(分隔符是一个空格): 代码: 结果: a is \s, b is v4.12, c is 1,2,3,4 a is /s, b is , c is 但当我尝试在参数中实现var时: 新代码: @echo off for /f "tokens=1,2,3 delims= " %%a in ("%1") do ( echo a is %%a, b is %%b, c is %%c ) 执行: test.bat \

我试图将批处理文件参数提取为3个字符串。我首先尝试使用一个变量,然后将其拆分为3(分隔符是一个空格):

代码:

结果:

a is \s, b is v4.12, c is 1,2,3,4
a is /s, b is , c is
但当我尝试在参数中实现var时:

新代码:

@echo off
for /f "tokens=1,2,3 delims= " %%a in ("%1") do (
echo a is %%a, b is %%b, c is %%c
)
执行:

test.bat \s v4.12 1,2,3,4
结果:

a is \s, b is v4.12, c is 1,2,3,4
a is /s, b is , c is
我试着打开echo,发现参数没有在循环中传递,我该如何修复它

========== 编辑(这是对Aacini回答的回应):

我当前的代码:

for /f "tokens=1-3" %%a in ("%*") do (
echo First is %%a, Second is %%b, Third is %%c
:loopers
for /f "tokens=* delims=," %%d in ("%%c") do (
echo %%d
shift
if not  "%%d"=="" (
goto :loopers else exit >nul
)
)
)
在获取第三个标记(%%c等于1,2,3,4)后,我必须再次创建一个循环,以使用逗号作为分隔符获取每个数字,但当我尝试时,它会无限显示%c(不是值,而是实际的%c文本)

结果是:

First is /s, Second is v1.4, Third is 1,2,3,4
1
%c
..infinite loop of %c..

对不起,我想我不明白你的问题

要执行此行:

test.bat /s v1.1 1,3,4,5
并在3个令牌中分离参数:“/s”、“v1.1”、“1,3,4,5”在6个令牌中分离参数:“/s”、“v1.1”、“1”、“3”、“4”、“5”

如果需要第一种情况,则此代码将执行以下操作:

@echo off
for /f "tokens=1-3" %%a in ("%*") do (
echo First is %%a, Second is %%b, Third is %%c
)
如果需要第二种情况,则每个参数在%1到%6个可替换参数中都已可用:

echo First is %1, Second is %2, Third is %3, Fourth is %4, Fifth is %5, Sixth is %6
如果这两种解决方案都不适合你,请用非常简洁的方式解释你想要什么!(不要混淆或以其他案例为例,只要写上“我想要这个…”)

编辑:新答案作为对新信息的回复

请注意,你必须意识到我不明白你想要什么。因为你没有说你想要什么,我只能猜测,所以我们再来一次

1-如果要在3个令牌中分隔参数:“/s”、“v1.1”和“1,3,4,5”,我已经通过%%a、%%b和%%c可替换参数演示了如何进行分隔

2-如果要将6个标记中的参数分开:“/s”、“v1.1”、“1”、“3”、“4”和“5”,并同时访问所有标记,可以使用%1..%6批处理参数

3-如果要分离任意数量的令牌中的参数(本例中为6个)并逐个处理,请使用以下代码:

:nextParam
   if "%1" equ "" goto endParams
   echo %1
   shift
   goto nextParam
:endParams
4-如果您想先将3个标记中的参数分离:“/s”、“v1.1”和“1,3,4,5”,然后将第三个标记(%%c)进一步分离为四个部分,那么我无法理解这可能是为了什么。然而,仅出于说明目的,这是实现此目的的方法:

for /f "tokens=1-3" %%a in ("%*") do (
   echo First is %%a, Second is %%b, Third is %%c
   for %%d in (%%c) do echo %%d
)
5-如果要将3个参数存储在3个变量中,并消除第三个变量中的逗号,请使用以下命令:

for /f "tokens=1-3" %%a in ("%*") do (
   set First=%%a
   set Second=%%b
   set Third=%%c
)
set Third=%Third:,= %
我强烈建议您阅读所使用的批处理命令的说明(通过
帮助命令
),不要使用任何您不理解的东西。请注意,复制您不理解的代码,修改它,然后问“为什么我的代码不工作?”是胡说八道。最好问一些关于你可能有疑问的具体问题

如果以上5点中没有一点是您想要的,那么如果您不向我们解释您想要什么(用文字,而不是通过代码示例),我们将无法进一步帮助您

安东尼奥