2014-05-05 89 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

相關問題