2

我想将运行带有参数的批处理脚本的输出分配给变量。请建议我如何做到这一点。

示例: 的输出datemath.bat %Date_Pattern% - 2应分配给一个变量。

说我date_pattern2013 05 03然后我的变量会想出2013 05 01

4

1 回答 1

3

通常有两种方法可以将命令的输出存储到变量中。我将假设只有一行输出被捕获。我还假设输出在标准输出上,而不是标准错误上。该命令可以是对批处理文件的调用、对批处理文件中的子例程的调用、内部命令、标准外部命令(可执行文件)或第 3 方可执行文件 - 将输出捕获到变量中的过程是相同的。

1) 将输出重定向到临时文件,然后使用 SET /P 将值读入变量

call dateMath.bat %Date_Pattern% - 2 >output.tmp
<output.tmp set /p "result="
del output.tmp

通常临时文件是在%TEMP%文件夹中创建的,但为了简单起见,我将所有内容都保存在当前目录中。

如果可能,人们通常喜欢避免使用临时文件,尽管有时这是最好的选择。

2) 使用 FOR /F 直接捕获输出,不使用临时文件。FOR /F 是一个复杂的命令,有很多选项。它旨在将输入解析为分隔标记。默认分隔符是空格;但是您希望将整个字符串捕获在一个变量中。因此,您需要将分隔符设置为空。FOR /F 可以读取文件内容、字符串或命令输出。您需要命令输出,因此 IN() 子句应该用单引号括起来。@ 符号用于抑制 SET 命令行的回显。

for /f "delims=" %A in ('dateMath.bat %Date_Pattern% - 2') do @set "result=%A"

如果要在批处理脚本中使用上述命令,则 FOR 变量百分比需要加倍。您的脚本可能已关闭回声,因此不需要 @。

for /f "delims=" %%A in ('dateMath.bat %Date_Pattern% - 2') do set "result=%%A"

您可以采用一种完全不同的方法:修改批处理脚本以选择将结果直接存储在变量中。您应该阅读以下来自 DosTips.com 的优秀教程DOS Batch - Function Tutorial该站点经常提到 DOS,但实际上它是一个专门研究处理 Windows 批处理脚本的所有事情的站点。

于 2013-10-05T15:34:50.757 回答