1

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

@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 回答 1

4

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

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

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

此外,在修剪不需要 0 in 的字符串的最后一个字符时:~0,-1,使用:~,-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
于 2012-09-22T04:46:02.363 回答