【问题标题】:Need help writing a .cmd file需要帮助编写 .cmd 文件
【发布时间】:2024-08-25 16:10:03
【问题描述】:

我正在学习使用 Microsoft 部署工具包的工作台任务序列自定义 Windows 部署映像。我正在使用我创建的 .cmd 文件添加一个 msi 包,以执行静默“客户端”安装。但即使以下在 CMD 行有效,它也不会在 cmd 文件中工作:

@echo off

c:\msiexec /i install.msi /l*vx C:\Slave_2_Install_ETIMS_log.txt INSTALL_SLAVE=true /quiet

当在 Workbench 的任务序列行中引用时,我需要让这个 cmd 文件执行静默安装:

cmd /c %Deployroot%\Applications\ETIMS\Install.cmd

但是,一旦我得到了为什么我的 .cmd 文件不起作用但同一行在命令提示符下起作用的答案,我将弄清楚上述语句中的语法是如何应用的。

【问题讨论】:

  • 什么不起作用?一个问题是install.msi 的位置。除非将“当前目录”设置为包含install.msi 的目录,否则这是行不通的。
  • 您确定在命令行中使用的是同一行吗?你输入的是c:\msiexec还是msiexec??
  • 它必须与所需文件 msiexec install.msi 等的位置有关
  • 如果“install,msi”应该与批处理文件在同一目录中,您可以使用糟糕的构造"%~dp0install.msi"。 “%0”总是返回正在运行的脚本的路径,而“~dp”修饰符只返回目录部分。
  • msiexec 可执行文件似乎不太可能位于根目录中。它可能应该被引用为“%SystemRoot%\System32\msiexec.exe”。而且,坦率地说,这应该已经在 PATH 中,这样只有使用 msiexec 才能工作。在cmd 提示符下,where msiexec 的输出是什么?

标签: windows batch-file cmd


【解决方案1】:

我找到了执行我想做的事情所需的命令。 我的一个错误是我以关闭@echo 开始我的文件 - 显然在 .cmd 文件中不需要。 我正在寻找的解决方案:

msiexec.exe /quiet /i %~DP0ETIMS_Client.msi INSTALL_SLAVE="TRUE"

感谢大家的回复。

【讨论】: