2010-11-03 68 views
6

我知道您可以使用帽子字符在批處理文件中跳過&符號在Windows批處理文件中轉義&符號

例如,

echo a ^& b 
a & b 

但我用命令

for /f "tokens=*" %%A IN ('DIR /B /A-D /S .acl') DO ProcessACL.cmd "%%A" 

這是查找在當前目錄中名爲「的.acl」的文件,或者當前目錄的子目錄。

問題是,我發現包含'&'字符(並且不,它們不能被重命名)的路徑名,我需要一種方法來自動轉義&符號並調用第二個批處理文件作爲參數的轉義路徑。

rem ProcessACL.cmd 
echo %1 

回答

7

的問題不在於轉義,這似乎是在第二個腳本。

如果有喜歡

echo %1 

一條線然後是擴張和失敗:

echo You & me.acl 

最好使用延遲擴展像

setlocal EnableDelayedExpansion 
set "var=%~1" 
echo !var! 

要還避免帶感嘆號的問題在參數點!,第一set應使用在DisabledDelayedExpansion上下文中。

set "var=%~1" 
setlocal EnableDelayedExpansion 
echo !var! 
+0

帶「&」的文件現在可以使用,但文件帶有「!」不再起作用 – ariel 2017-09-19 23:49:17

+0

@ariel謝謝你的提示,我添加了這一點的解決方案太 – jeb 2017-09-20 05:55:58

0

您的線應爲(注意*的.acl)

for /f "tokens=*" %%A IN ('DIR /B /A-D /S *.acl') DO ProcessACL.cmd "%%A" 

ProcessACL.cmd可以訪問傳遞給它的%1的路徑。

// ProcessACL.cmd 
ECHO %1 

無論變量%1包含什麼,都被完全包含。沒有必要逃脫。轉義是批處理器解釋正在分析的字符。

+1

感謝您的答覆。在「的.acl」是專門找了一個名爲「的.acl」,而不是所有的.acl的擴展名的文件的文件。我已經在ProcessACL.cmd文件中使用%1,這會產生錯誤「:在這個時候意外」,當%1包含了包括符號的路徑。 – Bryan 2010-11-03 16:06:37