处理尾随反斜杠&批处理文件中包含空格的目录名称

时间:2011-03-04 18:29:03

标签: batch-file

这是此问题的变体: 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%

但我没有运气。

有什么想法吗?

1 个答案:

答案 0 :(得分: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!

它比百分比扩展更晚扩展,并且在延迟扩展之后不再进行解析,因此即使空格或特殊字符也有效。