2
最新消息?蝙蝠文件,函數和插入符號
helper.bat
@echo off
echo %1
call:foo %1
goto:eof
:foo
echo %1
goto:eof
運行我們像下面
助手腳本 「^^^^」
輸出
「^^^^」
「^^^^^^^^」
爲什麼?我知道'^'符號在cmd.exe的情況下是特殊的,但是這裏發生了什麼?函數調用如何影響它?
最新消息?蝙蝠文件,函數和插入符號
helper.bat
@echo off
echo %1
call:foo %1
goto:eof
:foo
echo %1
goto:eof
運行我們像下面
助手腳本 「^^^^」
輸出
「^^^^」
「^^^^^^^^」
爲什麼?我知道'^'符號在cmd.exe的情況下是特殊的,但是這裏發生了什麼?函數調用如何影響它?
CALL
在這種情況下是非常特殊的!
批解析器有不同的階段,在特殊字符階段未加引號插入符號用於逃避下一個字符,插入符本身被刪除。
在你的情況下,插入符號被引用,所以它們不會受到影響。
然後,在延遲擴展階段,插入符號可能會再次受到影響,但引號在那裏沒有特殊含義,插入符號僅用於避免感嘆號。
通常延遲階段完成後,但如果您使用CALL
所有插入是加倍。
通常這是不可見的,因爲CALL
也會重新啓動解析器,並且再次在特殊字符階段中刪除插入符號。
但在你的情況下,他們被引用,因此他們保持倍增。
試試這個
call call call call echo a^^ "b^"
輸出
a^ "b^^^^^^^^^^^^^^^^"
解析器在How does the Windows Command Interpreter (CMD.EXE) parse scripts?
解釋是它記錄的行爲使用像水木清華 「的號召:FOO %% 1」,而不是「呼:foo%1「? – FrozenHeart
是的,這是標準的技術,以獲得更多的解析階段,通常在括號中很有用,如'call set line = %% line:abc = def %%' – jeb
因此,我可以使用這個技巧避免重複'^'符號?你知道我可以在MSDN中閱讀嗎? – FrozenHeart