2

我知道有很多关于 SO 的相关问题,例如this onethis one,但由于某种原因,到目前为止我无法让其中任何一个工作。

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

这是我的批处理文件

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

诀窍是我想将我的列表保留在脚本的顶部,每行一个元素,并且可以插入注释以明确发生的情况。

有没有办法做到这一点?

我更习惯于 linux bash,我必须说我对 windows 表示法有点迷茫。

谢谢!

4

3 回答 3

11

尝试这个:

@ECHO OFF &setlocal

for %%i in (
    "7zip.install"
    "notepadplusplus.install"
    "Firefox"
    "putty"
    "mysql -Version 5.5.30"
    "postgresql"
        ) do (
    echo %%i
    cinst "%%~i"
)
于 2013-06-20T08:02:48.667 回答
2

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

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"
)
于 2013-06-20T13:21:41.740 回答
0

for /F "tokens=*" %%i in %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
于 2013-06-20T07:51:18.123 回答