2014-01-30 36 views
4

我遇到了一個腳本問題,所以我去了ss64.com,就像我通常所做的一樣,看看我可能會找到哪些寶石來幫助我。CALL重定向意外的功能

在尋找的CALL command的頁面我碰到這條線進來:

重定向與& | <>也不能按預期工作。

然而,該網頁,只是其他地方我看沒有解釋它是如何工作意外。我知道the | can do some unexpected things in general但我不知道其他人。

這是什麼意外的功能?它取決於你如何使用CALL命令(調用標籤vs腳本)?

+0

可能是Simon在想什麼(更好地問ss64.org):http://www.dostips.com/?t = Snippets.ConditionalExecution – npocmaka

+0

@npocmaka該頁面沒有提到CALL或重定向。那是你的意思鏈接?我不會認爲條件執行是意想不到的功能。 –

+0

這裏是重定向的一些細節。 http://www.robvanderwoude.com/redirection.php –

回答

2

我想羅布想到的事情是這樣的:

call :func | more 
exit /b 

:func 
echo line1 
echo line2 
exit /b 

或者類似的東西

setlocal EnableDelayedExpansion 
set var=Line2 
(echo Line1 
echo !var!) | more 

對此的解釋可以在(你提到的這個)
SO:Why does delayed expansion fail when inside a piped block of code?

被發現但第一步中的重定向與預期的CALL一致(和其他字符)

call echo Hello > output.txt 

但是,如果您嘗試在CALL命令的第二次擴展中使用任何特殊字符,則不會執行完整的命令。
關於CALL批處理解析器特效在
SO:How does the CMD.EXE parse scripts?(特別是相6)

set "myCmd=echo 1 & echo 2" 
call %%myCmd%% 

%%有效果描述了第一膨脹導致在%myCmd%和內容的真實膨脹將不會完成,直到解析器的第二次運行,因此必須在call上下文中解釋&

而且也將會導致什麼

set "myCmd=echo Line1" 
call (%%myCmd%%) 

(因爲括號),但是,這將明顯呼叫命名爲1.bat

echo echo Hello > 1.bat 
set "myCmd=echo Line1 && echo Line2" 
call (%%myCmd%%) 
echo End 

一個批處理文件,這在dostips:CALL me, or better avoid call討論
目前我想,CALL以某種方式與令牌一起工作,但無法以正確的方式處理它們。

+0

我在搜索中遇到了該頁面,並將其包含在我的問題中。我仍然不知道爲什麼他在他的陳述中包含了其他重定向角色,儘管他們沒有任何不同之處。我希望能回答這個問題有助於突出顯示我遇到的另一個問題,但看起來我需要弄清楚如何制定我的其他問題。 –

+0

你是對的,但我希望我編輯的答案能爲其他角色帶來光明 – jeb

+0

你能解釋一下你的新例子嗎?我似乎沒有得到相同的結果。你的意思是把%加倍,因爲當我使用一個例子時,我得到了一些例子的輸出結果。 –