删除批处理文件中的尾部反斜杠

时间:2012-09-21 21:42:35

标签: batch-file character backslash

我正在编写一个简短的批处理脚本,它尝试获取第一行文本文件并删除尾部反斜杠(如果存在)。然后,这将重复输入文件的其余行。但是,当我运行脚本时,该行不会删除反斜杠。我的猜测是这是一个简单的修复,但我尝试了几种故障排除方法,没有运气。代码发布在下面以供参考。谢谢!

@echo on
setLocal EnableDelayedExpansion

::set firstline to firstline of test.txt
set /p firstline=<test.txt

::Remove trailing slash if present
IF !firstline:~-1!==\ SET firstline=!firstline:~0,-1!

::Output firstline (without \ to new txt file)
echo !firstline!>test2.txt

endlocal

test.txt文件:

C:\Desktop\example\path\ 

C:\Desktop\example\path\2\

C:\Desktop\example\path\test\  

1 个答案:

答案 0 :(得分:4)

你是对的,这是一个简单的问题。实际上它是通过引入4个字符来解决的,都是相同的。

在批处理中暴露反斜杠是一个坏主意,它可能会使解释器误以为它正在处理实际的文件或路径。你应该用双引号括起来。对于其他字符也是如此,包括!%&amp; *?/ \&lt;&gt; ,.主要是处理路径和文件的特殊字符。可能会有更多,有些只是偶尔出现问题。即使是1和2也会在重定向字符旁边造成麻烦。

只是为了让您知道,此处不需要setlocal或延迟扩展符号!,尽管它没有任何损害。 (除非延迟表示法使调试更加困难,因为在这种情况下,当ECHO为On时,显示变量名称而不是它的内容。)

此外,当修剪字符串的最后一个字符时,:~0,-1中不需要0,使用:~,-1就足够了。尽管这样做无论如何都没有害处。

最后,echo on是不必要的,因为echo on是默认值。 Echo On更多用于显示长文件执行的一小部分。虽然,再一次,它没有任何伤害。

@echo on
setLocal EnableDelayedExpansion

::set firstline to firstline of test.txt
set /p firstline=<test.txt

::Remove trailing slash if present
::Your error is below this
IF "!firstline:~-1!"=="\" SET firstline=!firstline:~,-1!

::Output firstline (without \ to new txt file)
echo !firstline!>test2.txt

endlocal