我正在编写一个简短的批处理脚本,它尝试获取文本文件的第一行并删除结尾的反斜杠(如果存在)。然后将对输入文件的其余行重复此操作。但是,当我运行脚本时,该行不会删除反斜杠。我的猜测是这是一个简单的修复,但我尝试了几种故障排除方法,但没有成功。下面贴出代码供引用。谢谢!
@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\
最佳答案
你是对的,这是一个简单的问题。事实上,通过引入 4 个相同的字符就可以解决这个问题。
批量暴露反斜杠是一个坏主意,它可能会让解释器误以为它正在处理实际的文件或路径。您应该用双引号将其引起来。对于其他字符也是如此,包括 !%&*?/\<>,。主要是处理路径和文件的特殊字符。可能还有更多,有些只是偶尔出现问题。当位于重定向字符旁边时,即使是 1 和 2 也会引起问题。
只是想让你知道,setlocal
或延迟扩展符号 !
在这里都不是必需的,尽管它没有什么害处。 (除了延迟符号使调试变得更加困难,就像在本例中一样,当 ECHO 打开时,显示变量名称而不是其内容。)
此外,当修剪字符串的最后一个字符时,您不需要 :~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
关于batch-file - 删除批处理文件中的尾部反斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12538562/