处理批处理文件中带有尾部反斜杠和空格的目录名。

3
这是一个与此问题“从批处理文件输入中删除尾随斜杠”略有不同的变体,因此我认为它不是重复的。但我在使用具有空格的目录(运行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个回答

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!

它比百分比扩展要晚,延迟扩展后不再进行解析,因此即使空格或特殊字符也没有任何影响。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接