我正在使用Windows命令行脚本。我想要做的是执行一个命令“A”,它由另一个命令“B”作为输出生成,我也可能想在执行它之前先检查命令是否存在。这里有人知道怎么做吗? 提前谢谢!
答案 0 :(得分:1)
a.exe > tmp.cmd
CALL tmp.cmd
答案 1 :(得分:1)
经典方法是将输出重定向到脚本文件Eugen Rieck suggested。可以通过写入临时文件夹并在完成时删除临时脚本来进行优化。我将一个随机数加入临时脚本名称,以减少脚本的两个同时实例不会相互干扰的可能性。
@echo off
setlocal
set script="%temp%\temp%random%.bat"
commandA >%script%
call %script%
del %script%
您的commandA可能不会产生任何输出。执行空脚本不会导致任何错误。但是如果需要,您可以通过以下方式检测到脚本为空:
for %%A in (%script%) do if %%~zA equ 0 echo The script is empty.
可以使用多个命令构建脚本:
commandA >%script%
commandB >>%script%
commandC >>%script%
或更有效地:
>%script% (
commandA
commandB
commandC
)
非经典方法是将命令存储在变量而不是脚本文件中,然后将扩展值作为宏执行。宏的执行可能明显快于脚本的执行,因为它基于所有内存。但是,成功构建功能宏的规则比构建脚本更复杂。宏也限制为最多8191个字符(字节) - 批处理环境变量的最大长度。
甚至可以创建一个接受参数并返回值的宏!
DOSTips网站上的批量宏已经完成了大量的工作。如果您有兴趣尝试它们,这里有两个重要的参考:
http://www.dostips.com/forum/viewtopic.php?p=7330一个好的起点,展示了概念的发展,以及许多关键组件
的宏的最新和最好的语法答案 2 :(得分:0)
在大多数情况下应该有效的简单方法是:
for /F "tokens=*" %%i in ('a.exe') do %%i
或
for /F "tokens=*" %%i in ('a.exe') do if "%%i" NEQ "" %%i