1

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

代码:

@echo off
set var=\s v4.12 1,2,3,4
for /f "tokens=1,2,3 delims= " %%a in ("%var%") do (
echo a is %%a, b is %%b, c is %%c
)

结果:

a is \s, b is v4.12, c is 1,2,3,4

但是当我尝试将 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 , c is

我尝试打开回声,发现参数没有在循环中传递,我该如何解决?

========== 编辑(这是对 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..
4

1 回答 1

2

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

你想执行这一行:

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:,= %

我强烈建议您阅读您使用的批处理命令的说明(通过HELP command),不要使用任何您不理解的内容。注意复制一个你不理解的代码,修改它然后问“为什么我的代码不起作用?” 是胡说八道。最好就您可能有的具体疑问提出具体问题。

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

安东尼奥

于 2012-12-07T03:31:52.303 回答