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

标签 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\  

最佳答案

你是对的,这是一个简单的问题。事实上,通过引入 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/

相关文章:

windows - 信息 : Could not find files for the given pattern(s) doing `where git`

windows - 批处理 - Forfiles 具有多种文件类型的循环

java - 替换带有反斜杠的变量

包含反斜杠的 Java 命令行参数

windows - 为什么我的 Perl 脚本和 Windows 的 SendTo 不能使用超过 20 个文件?

windows - 批量复制唯一文件到新文件夹

string - 哪个是比较字符和字符串的最笨拙的方法? (单字符字符串)

java - 如何使用 Character Class 检查用户提示的 SSN 是否有效?

python - 从 python 中的字符串中过滤字符。 (如果字符在string2中,则从string1中过滤)

Python反向转义字符