我想创建一个实用程序批处理文件,它将被客户端批处理文件使用。 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%"
需要语法帮助才能将结果作为输出传递。
我在网上找到了许多将结果传递给文本文件(日志记录)的答案,但这不是我的要求。
答案 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%
....