2013-04-17 42 views
0

我用這個批處理文件test.bat的簽名:逃生和批處理命令行參數

setlocal EnableDelayedExpansion 
set var=%* 
md "c:\testfolder\!var!" 

這運行正常此類似「test.bat的這是一個測試」,但當特殊字符用於它不行。所以「test.bat test & go」只創建文件夾「c:\ testfolder \ test」。如何逃避所有特殊字符?

我試過使用test.bat「this a & test」,但是當我回顯!var!那麼它與雙引號相呼應,我不希望那樣。

+0

你嘗試'設置 「VAR =%*」'? – Endoro

+0

@Endoro,剛剛嘗試過,不起作用! – Mbrouwer88

+0

請不要忘記在命令行中轉義一些字符,否則會得到獨立於批處理的語法錯誤。選中它並在你的批處理中加入'echo「%*」'。 – Endoro

回答

0
FOR %%d IN (%*) DO md "u:\testfolder\%%~d" 

應該工作(不需要ENABLEDELAYEDEXPANSION)

它也可以使多個目錄

yourbatch "test & go" nospecial "oranges & lemons" 

創建test & gonospecialoranges & lemons

現在你必須離開城市之前,批次私刑暴徒讓你創建愚蠢的目錄名稱...


對新要求的修正。

@ECHO OFF 
SETLOCAL 
FOR %%d IN (%*) DO SET "var=%%~d" 
SET var 
ECHO ========= 
ECHO %var:&=^&% 
ECHO ++++++++++ 
SET "var=%var:&=^&%" 
ECHO %var% 

作品由^&更換&,逃避&

+0

感謝您的答案,它適用於MD,但我需要做一些其他的事情與輸入。爲了設置var,我嘗試了「FOR %% d IN(%*)DO set var = %%〜d」,但仍然是「test&so on」使我留下了「test」。 – Mbrouwer88

+0

你是怎麼測試的?問題是,簡單地說'ECHO'變量不起作用,因爲解析器將用它的值替換變量。我修改了代碼來演示。 – Magoo