【问题标题】:CMD Script for-loop run multiple variable executable filesCMD Script for-loop 运行多个变量可执行文件
【发布时间】:2014-08-04 12:29:09
【问题描述】:

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

让我们看看,这是我的目录,里面有强制文件。

  • 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\ 目录并将内容写入 c:\programs.txt。在 variables.ini 中是作为 %prog% 变量嵌入的programs.txt 文件。现在我运行update.cmd,它从programs.txt中获取第一个变量程序,在本例中为scribus,并使用/silent和/quiet标志开始安装(一些程序使用/s和其他/q,但不是两者,也许是一个可能的错误,但我没有更好的主意)。安装后等待 5 秒钟,然后删除 .exe 文件。如果还有其他可执行文件,则脚本再次启动,直到存储目录为空。

我希望你能理解我...我尝试了一些其他的方法,但我失败了。 所以我在没有变量文件的情况下尝试了它并在update.cmd中执行了扫描命令

@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 循环的教程和线程,但没有人从变量执行设置文件。

有谁知道我可以解决这个问题的方法吗? 非常感谢提前!

【问题讨论】:

    标签: windows variables for-loop cmd executable


    【解决方案1】:

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

    就像cmd.exe 一样:PowerShell 是未来,而且功能更强大。并使用ping 进行延迟(它会在收到前一个 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:它只会列出带有名称的变量,你没有设置值)。

    【讨论】:

    • 请忽略我在帖子末尾发布的愚蠢尝试。第一个长 cmd 脚本是相关的。我已经有一个类似的用于唤醒局域网的脚本(它可以工作!),但是我在那里调用 wol.exe (for /f %%i in (%mac_addresses%) do %wol% %%i),我想我也可以将其用于我的安装想法。但它不起作用。编辑:路径 c:\ 用于测试,后来它存储在 C:\scripts\ 中,我认为如果我尝试直接在 C:\ 中运行它进行测试是没有意义的
    • @user3048888 Cmd 非常受限。虽然可以实现很多目标,但一旦您考虑数据文件,您最好将时间花在具有正确功能的东西上(即 PowerShell)。例如。 PSH 可以轻松地对 MAC 地址列表执行 WMI 查询,或者等待进程退出。
    • 我知道限制,但我没有 psh 的经验。它适用于普通的 Windows 7 PC。顺便提一下,我已经完成了许多脚本并且它们都可以工作。这是最后一个,如果我必须为这个重新开始,这很令人沮丧。 :(
    • @user3048888 cmd 的问题之一是调试困难:一个小改动可能会破坏一切。你所能做的就是把事情拆掉,然后重新建立起来,希望避免出现新的错误。很多echo 可以提供帮助,但最终它是一个非常薄弱的​​工具。如果这种脚本是一种常见的需求,那么投资于一个为严肃的脚本而设计的、积极维护的现代工具将获得很多回报(PSH v2 包含在 Win7 中,尽管可以安装新版本。)
    • PSH v2 肯定是一个很好的实用程序,但 PSH 又是一个 M$ 的东西,它再次发明了轮子。我只是想修复我的 for 循环,但不知道如何。正如您所读到的,它有点作用,但是 scribus 的安装没有开始,它不在变量 %%i 中。在 %%i 中只是programs.txt 而不是内容。那么我如何获取变量中的内容(它不能是 %%i)以便我可以安装,然后删除安装文件?
    猜你喜欢
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多