我正在尝试将数组传递给conca。 bat 文件,以便我可以连接列表或数组所具有的所有字符串。 我已经能够连接,但是如果我手动放置数组,但是当我从命令行传递ii时我无法做到这一点......
有效:
FOR %%i IN (12346,49874,48954) DO call :concat %%i
set var=%var%%1;
不起作用
FOR %%i IN %1 DO call :concat %%i
set var=%var%%1;
我必须从命令提示符处遵循什么结构?
conca.bat "12346,49874"
或
conca.bat {12346,49874}
答案 0 :(得分:1)
CMD中没有真正的列表或数组。但是,如果我正确地理解了您的问题,那么您正尝试这样做:
concat.bat 123 456 789
并希望输出为123456789
。如果是这种情况,SHIFT
是您正在寻找的神奇命令。这应该这样做:
@ECHO OFF
SET concatString=
:LOOP
IF [%1]==[] GOTO ENDLOOP
SET concatString=%concatString%%1
SHIFT
GOTO LOOP
:ENDLOOP
ECHO %concatString%
PAUSE
当您通过命令行将参数传递给bat文件时,可以通过%1
,%2
,%3
访问它们等等。这意味着concat.bat a b c
%1
{ {1}}是a,%2
是b,%3
是c。唯一的问题是我们可能不知道会有多少参数,并且您希望脚本只使用一个参数以及100个参数。此时SHIFT
正在节省一天。
SHIFT
做了一件简单的事。它将参数的索引向右移动,因此" old" %1
消失,%2
变为%1
,%3
变为%2
,依此类推。我们继续循环,直到最后传递的参数变为%1
。在另一次转换之后,没有值可以分配给%1
,因此[%1]==[]
变为true
,我们跳出循环。