2011-03-04 190 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