如何将批处理文件的输出重定向到另一个批处理文件?

时间:2014-05-05 13:56:24

标签: batch-file

我想创建一个实用程序批处理文件,它将被客户端批处理文件使用。 Utility批处理文件将创建结果&将重定向为输出。 客户端批处理文件将调用utility.bat&将得到一个变量的结果。

我写的Utility.bat的代码如下

echo off
set result="some info"
echo %result%
rem output

我不确定如何将结果作为输出

传递的语法

client.batch的代码如下

@echo off 
set var1=%Utility.bat%
echo "%var1%"

需要语法帮助才能将结果作为输出传递。

我在网上找到了许多将结果传递给文本文件(日志记录)的答案,但这不是我的要求。

2 个答案:

答案 0 :(得分:3)

您需要使用CALL让一个批处理文件调用另一个。您可以将变量的名称作为参数传递,CALLed脚本可以将结果存储在那里。

Utility.bat

@echo off
set "result=some info"
set "%~1=%result%"

Client.bat

@echo off
call utility var1
echo var1=%var1%

如果Utility使用SETLOCAL,则需要一种机制来传递ENDLOCAL障碍的值。只有实用程序需要更改:

Utility.bat

@echo off
setlocal
set "result=some info"
endlocal & set "%~1=%result%"

如果返回值可能包含引号和有毒字符,则需要使用其他方法。

Utility.bat

@echo off
setlocal enableDelayedExpansion
set result="Quoted <^&|>" and unquoted ^<^^^&^|^>
for /f delims^=^ eol^= %%A in ("!result!") do endlocal & set "%~1=%%A"

上面的最后一个代码支持除回车符(0x0D)和换行符(0x0A)之外的所有字符,如果调用者(client.bat)启用了延迟扩展,则返回值包含!时会出现问题。有一种解决方案可以消除限制,但它很复杂。请参阅https://stackoverflow.com/a/8257951/1012053

答案 1 :(得分:1)

utility.bat

...
set result="some info"
call client.bat %result%
...

client.bat

...
set var1=%1
echo %var1%
....