2

我有一个 bat 脚本,它将单个字符串作为命令行参数来确定要复制哪些配置文件。bat 代码对于变量赋值(如下所述)非常简单,并且当我自己运行它时,它可以与我抛出的任何命令行参数一起按预期工作。

@ECHO OFF
setlocal enabledelayedexpansion
set var=%1%
if "%var%" == "" (
   echo Argument missing
   EXIT 1
)

当我尝试使用 IExpress 创建一个使用此 bat 文件作为安装程序的自解压存档时,问题就出现了。我无法弄清楚如何指示应将赋予可执行文件的命令行参数传递给安装程序(bat 脚本)。本质上,我希望能够运行:

myiexpressexecutable.exe arg1

从 Windows 命令行并让 bat 安装程序将“var”分配给“arg1”的任何值。

我不确定是我不知道正确的语法还是 IExpress 不允许这样做。我尝试将 IExpress 向导中的安装程序设置为:

cmd.exe /c zabbix_install.bat %1

cmd.exe /c zabbix_install.bat %*

在这两种情况下,如果我尝试将参数传递给生成的可执行文件,我都会收到消息“命令行操作语法错误。键入 /? 以获得帮助”。当我不传递任何参数时,底层 bat 脚本运行,但将 %1 或 %* 视为文字字符串“%1”或“%*”。

当我将 iexpress 中的安装程序设置为:

cmd.exe /c zabbix_install.bat

当我包含可执行文件的命令行参数时,我收到相同的“命令行操作语法错误”消息。当我在没有任何参数的情况下运行这个 exe 时,底层批处理脚本会失败,因为 var 是一个空字符串。

谁能帮我弄清楚我在为这个exe设置安装程序时做错了什么?或者有谁知道 IExpress 是否根本无法创建带有命令行参数的 exe?

谢谢

4

1 回答 1

2

如果你使用

myiexpressexecutable.exe /? 

它告诉你一些关于参数的信息。将 iexpress 中的程序设置为

cmd.exe /c zabbix_install.bat

然后使用以下参数运行编译文件:

myiexpressexecutable.exe /c:" cmd.exe /c zabbix_install.bat arg1"

注意引号和 cmd.exe 的开头之间的空格。文档说它应该像这样运行,但它可能不正确。也可以尝试不使用空格。

于 2018-01-16T01:44:21.033 回答