如何执行cmd上其他程序生成的命令?

时间:2012-06-21 12:00:59

标签: windows cmd

我正在使用Windows命令行脚本。我想要做的是执行一个命令“A”,它由另一个命令“B”作为输出生成,我也可能想在执行它之前先检查命令是否存在。这里有人知道怎么做吗? 提前谢谢!

3 个答案:

答案 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一个好的起点,展示了概念的发展,以及许多关键组件

http://www.dostips.com/forum/viewtopic.php?p=11344带有参数

的宏的最新和最好的语法

答案 2 :(得分:0)

在大多数情况下应该有效的简单方法是:

for /F "tokens=*" %%i in ('a.exe') do %%i

for /F "tokens=*"  %%i in ('a.exe') do if "%%i" NEQ "" %%i