这是此问题的变体: 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%
但我没有运气。
有什么想法吗?
答案 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!
它比百分比扩展更晚扩展,并且在延迟扩展之后不再进行解析,因此即使空格或特殊字符也有效。