我知道有很多关于SO的相关问题,例如this one或this 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符号。
谢谢!
答案 0 :(得分:10)
试试这个:
@ECHO OFF &setlocal
for %%i in (
"7zip.install"
"notepadplusplus.install"
"Firefox"
"putty"
"mysql -Version 5.5.30"
"postgresql"
) do (
echo %%i
cinst "%%~i"
)
答案 1 :(得分: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"
)
答案 2 :(得分: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