是否可以在 Windows 命令行中使用一个变量来表示程序的多个参数?

是否可以在 Windows 命令行中使用一个变量来表示程序的多个参数?

在我的批处理文件中,我多次调用同一个程序并使用相同的参数:

program.exe file1.txt -parameter1 -parameter2 -parameter3 -parameter4 >> output.log
program.exe file2.txt -parameter1 -parameter2 -parameter3 -parameter4 >> output.log
...

我可以声明一个包含字符串“-parameter1 -parameter2 -parameter3 -parameter4 >> output.log”的变量并像这样使用它吗:

Set variable=-parameter1 -parameter2 -parameter3 -parameter4 >> output.log 
program.exe file2.txt %variable%

我尝试这样做,但不起作用。如果可以,正确的语法是什么?

答案1

在 SET 命令中,您必须用 ^ 转义每个 > 符号。
这可防止 SET 命令将 >> 解释为输出的重定向。

所以:

Set variable=-parameter1 -parameter2 -parameter3 -parameter4 ^>^> output.log
program.exe file2.txt %variable%

如果您要调用子 shell(使用 CMD /C),Lemur 的答案是正确的版本,但对于直接调用,则不需要这样做。

答案2

我开始回答这个问题时说“对不起,不行。”但令我惊讶的是,你可以!虽然不是很美观,也不高效,但你可以做到。

将常规参数存储在program.exe变量中很简单。这是可行的(这只是您的示例,没有重定向):

SET MYARGS=-parameter1 -parameter2 -parameter3
program.exe file1.txt %MYARGS%

但是,重定向不是作为程序的参数来处理的,而是作为 shell 的指令来处理的。它发生在变量设置或扩展之前,因此包括后缀会>> output.log立即将输出写入日志文件。

为了使其工作,您必须转义命令字符串,并为每次调用程序启动一个新进程。

SET MYARGS=-parameter1 -parameter2 -parameter3 -parameter4 ^^^>^^^> output.log
CMD.EXE /C program.exe file1.txt %MYARGS%
CMD.EXE /C program.exe file2.txt %MYARGS%

当然,如果您的日志文件的名称或位置需要更改,这种方法会使其更简洁一些:

SET LOGFILE=output.log
SET TOLOG=^^^>^^^> %LOGFILE%
SET MYCMD=-parameter1 -parameter2 -parameter3 -parameter4
CMD.EXE /C program.exe file1.txt %MYARGS% %TOLOG%
CMD.EXE /C program.exe file2.txt %MYARGS% %TOLOG%

每次调用都启动整个命令解释器有点麻烦,但也许这对你的情况来说没问题。如果你尝试一下,我很想知道它如何影响你的运行时间。

笔记:此技巧至少还有另一个可能的陷阱。您在批处理文件中设置的变量将无法在您调用的 CMD shell 中使用。您可以强制它们可用,但这需要更多代码,而且对于您正在做的事情来说似乎没有必要。

Windows 批处理文件的隐藏功能逃脱^技巧等等。

答案3

是否可以在 Windows 命令行中使用一个变量来表示程序的多个参数?

当然是

我可以声明一个包含该字符串的变量吗:
    -parameter1 -parameter2 -parameter3 -parameter4 >> output.log

像这样使用它:
    set variable=-parameter1 -parameter2 -parameter3 -parameter4 >> output.log
    program.exe file2.txt %variable%

是的,您绝对可以这样做,但是正如前面提到的,您需要转义重定向字符。

你没有说明是否必须在批处理文件中设置变量。如果没有,那么您可以使用常规环境变量对话框来设置变量(如下所示)。

如果必须在批处理文件中设置变量,那么您可以像其他人指出的那样对其进行转义,但由于语法原因,这种方法往往不太实用。相反,您可以简单地引用对以下内容的调用set


set "variable=-parameter1 -parameter2 -parameter3 -parameter4 >> output.log"
program.exe file2.txt %variable%

环境变量对话框的屏幕截图,其中变量包含重定向字符

相关内容