2011-03-04 186 views
3

這是這個問題的變化尾部反斜槓與目錄名稱用空格: Remove Trailing Slash From Batch File Input處理在批處理文件

但它是微妙的不同,所以我不認爲這是一個傻瓜。

我在使用它們中有空格的目錄(運行WinXP)時遇到了麻煩。

:START 
@echo What folder do you want to process? (Provide a path without a closing backslash) 
set /p datapath= 

::Is string empty? 
IF X%datapath% == X GOTO:START 

::Does string have a trailing slash? if so remove it 
IF %datapath:~-1%==\ SET datapath=%datapath:~0,-1% 

echo %datapath% 

它處理:

c:\ 

正確(其剝離到C :)

但是,如果你輸入:

c:\test space 

錯誤是「空間是意外的在這時間。」

如果你試圖輸入:

"c:\test space" 

你得到同樣的錯誤。

我認爲這將涉及戰略地位「兩這一行:?

IF %datapath:~-1%==\ SET datapath=%datapath:~0,-1% 

但我沒有任何運氣

任何想法

回答

2

你能解決嗎具有延遲擴展,因爲延遲擴展工作不同於擴展百分比。

:START 
setlocal EnableDelayedExpansion 
@echo What folder do you want to process? (Provide a path without a closing backslash) 
set /p datapath= 

::Is string empty? 
IF X!datapath! == X GOTO:START 

::Does string have a trailing slash? if so remove it 
IF !datapath:~-1!==\ SET "datapath=!datapath:~0,-1!" 

echo !datapath! 

擴展比擴展晚,並且在延遲擴展之後不再進行解析,因此即使空格或特殊字符也有效。

+0

令人敬畏。謝謝! – 2011-03-04 19:56:12