2014-05-05 177 views
0

我想创建一个实用程序批处理文件,该文件将被客户机批处理文件使用。 实用程序批处理文件将创建结果&将重定向为输出。 客户端批处理文件将调用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

您需要使用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

+0

在实用程序中我正在使用正在处理的变量。你可以请建议一个语法,我可以分配变量值输出。 – rajesh

+0

@rajesh - 完成,看到更新的答案。 – dbenham

1

utility.bat

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

client.bat

... 
set var1=%1 
echo %var1% 
.... 
+0

实用程序不应该调用客户端; “任何”(创建实用程序时,我们不知道任何客户端)客户端可以调用该实用程序。 – rajesh

相关问题