2015-09-28 88 views
1

我有一個接收路徑作爲第一個參數的批處理文件。路徑總是由特殊字符組成,如^,éè轉義Windows批處理中的特殊字符

調用與此類似

D:\Script>MyBatch My\path\test_00170_LASTNAME^Firstname\image 

總是有這樣的錯誤:未知的指定路徑

當我回響在我的bash的第一個參數,我可以看到(注意失蹤^

My\path\test_00170_LASTNAMEFirstname\image 

所以我試圖通過在

之前加上另一個 ^來逃避這個角色
My\path\test_00170_LASTNAME^^Firstname\image 

但當我贊同這一塊,我也有同樣的結果...

My\path\test_00170_LASTNAMEFirstname\image 

我也試圖把引號之間的^但這並沒有工作

+0

刪除bash的標籤。 – 123

回答

1

你需要逃避在命令行中插入符號標誌或更好的把路徑進入報價輸出。

在這兩種情況下,您都應該使用延遲擴展,因爲內容在擴展時不會被修改。

myBatch "C:\LASTNAME^Firstname\image" 

myBatch C:\LASTNAME^^Firstname\image 

而在你的批量使用swomething這樣

@echo off 
set "arg1=%~1" 
setlocal EnableDelayedExpansion 
echo !arg1! 
+0

明白了,但實際上在使用'cd/d!arg1!',當'echo%cd%'之後,'^'仍然被移除 – Raccoon

+0

是的,用'echo!cd!'嘗試它,因爲百分比擴展是這裏的問題 – jeb

0

你需要逃脫兩次 - 一次是當你輸入的路徑作爲參數傳遞給批處理腳本,並再次echo'ing時:

caret_input.bat

echo %1 

雙重逸出(注意如何在批處理文件開始輸出本已逃出):

C:\>caret_input.bat my\path^^^^is\special 

C:\>echo my\path^is\special 
my\path^is\special 

如果你使用的字符串中包含特殊字符裏面的批處理文件,你的方法逃離它只是一次會工作得很好:

caret_escape.bat

echo my\path^^is\special 

C:\>echo my\path^is\special 
my\path^is\special 
+0

恕我直言,內容應該是* clean *,因爲它不應該包含額外的插入符來處理擴展百分比,因爲當你嘗試使用它也帶有引號時,處理情況會變得很糟糕。在大多數情況下,延遲擴展是正確的選擇 – jeb