For loop for循环中的Windows批处理逗号分隔列表

For loop for循环中的Windows批处理逗号分隔列表,for-loop,batch-file,delimiter,For Loop,Batch File,Delimiter,我知道有很多相关的问题,比如说,或者,但是由于某种原因,到目前为止我还没有找到任何相关的问题 我正在尝试创建一个批处理文件,以便连续安装多个软件: 这是我的批处理文件 set packages=(7zip.install, ^ :: for compression notepadplusplus.install, ^ :: file editor Firefox, ^ putty, ^ mysql -Version 5.5.30, ^ postgresql) for %%i in %packa

我知道有很多相关的问题,比如说,或者,但是由于某种原因,到目前为止我还没有找到任何相关的问题

我正在尝试创建一个批处理文件,以便连续安装多个软件:

这是我的批处理文件

set packages=(7zip.install, ^ :: for compression
notepadplusplus.install, ^ :: file editor
Firefox, ^
putty, ^
mysql -Version 5.5.30, ^
postgresql)

for %%i in %packages% do ( 
::echo %%i
cinst %%i
)
除了mysql部分,一切正常。空格实际上被当作分隔符,这意味着

E:\>(echo 7zip.install )
7zip.install

E:\>(echo notepadplusplus.install )
notepadplusplus.install

E:\>(echo Firefox )
Firefox

E:\>(echo putty )
putty

E:\>(echo mysql )
mysql

E:\>(echo -Version )
-Version

E:\>(echo 5.5.30 )
5.5.30

E:\>(echo postgresql )
postgresql
我想要的结果是

E:\>(echo mysql -Version 5.5.30 )
 mysql -Version 5.5.30
诀窍是,我想让我的列表位于脚本的顶部,每行一个元素,并且有可能插入一条注释以清楚发生了什么

有没有办法做到这一点

我更习惯于LinuxBash,我必须说我对windows符号有点迷茫

谢谢

对于/F“令牌=*”%%i在%packages%%中

举个mysql的例子:

C:\temp>for /F "tokens=1,2,3,4,5 delims=," %i in ("%packages%") do echo %l

C:\temp>echo mysql -Version 5.5.30
mysql -Version 5.5.30
但我必须重写你的var定义:

set packages=7zip.install,notepadplusplus.install,putty,mysql -Version 5.5.30,postgresql
试试这个:

@ECHO OFF &setlocal

for %%i in (
    "7zip.install"
    "notepadplusplus.install"
    "Firefox"
    "putty"
    "mysql -Version 5.5.30"
    "postgresql"
        ) do (
    echo %%i
    cinst "%%~i"
)

虽然有些冗长,但此方法允许您在每行中插入注释:

set "packages=           7zip.install"                  // for compression
set "packages=%packages% notepadplusplus.install"       // file editor
set "packages=%packages% Firefox"
set "packages=%packages% putty"
set "packages=%packages% "mysql -Version 5.5.30""       // use nested quotes here
set "packages=%packages% postgresql"

for %%i in (%packages%) do (
   echo %%~i
   REM cinst "%%~i"
)

您的解决方案不会打印任何内容:s.
“mysql-Version 5.5.30”
需要双引号。否,对于
for/f
循环,它需要对
cinst“%%~i”
使用双引号,但对于循环则不需要。这会管用的。谢谢,这样就管用了。为了使它更完美,你知道有没有一种方法可以插入评论呢?我尝试了“7zip.install::comment”,但它并不喜欢:sNo,括号内不能有注释
()
,而且
REM
不起作用,所有内容都被解释为有效字符串。在()中%%i的
前面的行中添加您的注释。您可以使用百分比注释,如
“7zip.install”%=one comment%
。这实际上是未定义variable@jeb谢谢-我不喜欢这个,所以我忘了:)