CMD脚本for循环运行多个可变可执行文件

时间:2014-08-04 12:29:09

标签: windows variables for-loop cmd executable

我正在研究 - 我认为 - 简单的脚本,它可以安装多个程序。

所以,让我们看看,这是我的目录,附带必填文件。

  • C:\ variables.ini
  • C:\ programs.txt
  • C:\ update.cmd的
  • C:\ scan.cmd
  • C:\ storage \ * .exe

* .exe的示例是“scribus-1.4.4-windows-x64.exe”

variables.ini包含

prog=C:\programs.txt

programs.txt包含

scribus-1.4.4-windows-x64.exe

scan.cmd包含

dir C:\storage /b /a-d > programs.txt

现在出现问题:update.cmd

@ECHO OFF & SETLOCAL 
REM Read variables
for /f %%i in (C:\variables.ini) do set %%i
cd C:\storage\
for /f %%i in %prog% do %%i /Q /S
ping localhost -n 5 > nul
del %%i
ping localhost -n 5 >nul
exit

update.cmd如何运作?

我有一个主.cmd从那里我调用多个.cmd文件,它做了几件事。如您所见,我首先运行scan.cmd。它扫描c:\ storage \ dir并将内容写入c:\ programs.txt。在variables.ini中是program.txt文件,嵌入了%prog%变量。现在我运行update.cmd,它接受来自programs.txt的第一个变量程序,在本例中为scribus,并使用/ silent和/ quiet标志启动安装(某些程序使用/ s和其他/ q,但不是两者,也许是一个可能的错误,但我没有更好的主意)。安装后,它等待5秒钟,然后删除.exe文件。如果有其他可执行文件,则脚本再次启动,直到存储目录为空。

我希望你理解我......我尝试了其他一些方法,但我失败了。 所以我尝试了没有变量文件并在update.cmd

中执行了scan命令
@ECHO & SETLOCAL 
cd C:\storage\
for /F %%i in ('dir C:\storage /b /a-d') do set %%i
%%i /Q /S
ping localhost -n 5 >nul
pause

我遇到了一些错误,那就是scribus没有环境变量。我不知道为什么它应该是任何人?我尝试了谷歌并阅读了许多关于for循环的教程和线程,但没有一个人从变量执行设置文件。

有谁知道如何解决这个问题? 非常感谢提前!!

1 个答案:

答案 0 :(得分:0)

注意到您的路径很糟糕:不要将内容安装到系统驱动器的根目录中。

原样cmd.exe:PowerShell是未来,功能更强大。并使用ping进行延迟(它会在上一次收到后立即发送下一个ping:所以不是一个好的计时机制)。

但我认为你需要做的就是启动可执行文件

start /wait command

在命令完成之前不会返回。

您似乎也尝试在cmd中的for循环中运行多个命令,这是可能的:

for /F %%i in ('dir C:\storage /b /a-d') do set %%i && %%i /Q /S

使用&&分隔命令(不清楚为什么你有set %%i:它只会列出名称变量,你没有设置值。)