【问题标题】:Handling trailing backslash & directory names with spaces in batch files处理批处理文件中带有空格的尾随反斜杠和目录名称
【发布时间】:2011-07-09 00:56:49
【问题描述】:

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

但我没有运气。

有什么想法吗?

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    您可以通过延迟扩展来解决它,因为延迟扩展的工作方式与百分比扩展不同。

    :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!
    

    它比percent扩展晚,延迟扩展后不再解析,所以即使是空格或特殊字符也有任何影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 2018-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      相关资源
      最近更新 更多