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