Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 删除批处理文件中的尾部反斜杠_Batch File_Character_Backslash - Fatal编程技术网

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

Batch file 删除批处理文件中的尾部反斜杠,batch-file,character,backslash,Batch File,Character,Backslash,我正在编写一个简短的批处理脚本,它尝试获取文本文件的第一行并删除尾部的反斜杠(如果存在)。然后对输入文件的其余行重复此操作。但是,当我运行脚本时,该行不会删除反斜杠。我猜这是一个简单的解决方案,但我尝试了几种故障排除方法,但都没有成功。代码发布在下面以供参考。谢谢 @echo on setLocal EnableDelayedExpansion ::set firstline to firstline of test.txt set /p firstline=<test.txt ::R

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

@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

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

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

只是想让您知道,无论是
setlocal
还是延迟扩展符号
在这里是必要的,尽管它没有害处。(除了延迟符号使调试变得更困难,就像在本例中一样,当ECHO打开时,它会显示变量名,而不是它的内容。)

另外,在修剪字符串的最后一个字符时,您不需要在
:~0,-1
中使用0,使用
:~,-1
就足够了。尽管这两种方式都没有坏处

最后,
上的
echo是不必要的,因为
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
@echo on
setLocal EnableDelayedExpansion
::将firstline设置为test.txt的firstline
set/p firstline=test2.txt
端部

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

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

只是想让您知道,无论是
setlocal
还是延迟扩展符号
在这里是必要的,尽管它没有害处。(除了延迟符号使调试变得更困难,就像在本例中一样,当ECHO打开时,它会显示变量名,而不是它的内容。)

另外,在修剪字符串的最后一个字符时,您不需要在
:~0,-1
中使用0,使用
:~,-1
就足够了。尽管这两种方式都没有坏处

最后,
上的
echo是不必要的,因为
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
@echo on
setLocal EnableDelayedExpansion
::将firstline设置为test.txt的firstline
set/p firstline=test2.txt
端部

感谢您的澄清。但是,当我使用test.txt(现在列在原始问题中)测试文件时,后面的反斜杠仍然没有删除。还有什么我遗漏的吗?@JeffK-你可能真的在那一行的末尾有一个尾随空格。这样做的结果是:
ECHO%stuff%>文件
,它看起来比
ECHO%stuff%>文件
更好,但在每行末尾都添加了一个空格。事实上,如果您使用
echo,那么每次运行我的代码时都会添加额外的空间!第一线!>txt,而不是echo!第一线!>test2.txt
。您的观察是正确的,我还通过使用以下行解决了这个问题(考虑空间):
如果“!firstline:~-2!”=”\“SET firstline=”!第一行:~,-2。非常感谢你的帮助,我很感激@杰夫克-听到这个消息我很惊讶。我本以为需要
如果“!firstline:~-2!”==”
如果“!firstline:~-2,1!”==”
。谢谢你的澄清,詹姆斯。但是,当我使用test.txt(现在列在原始问题中)测试文件时,后面的反斜杠仍然没有删除。还有什么我遗漏的吗?@JeffK-你可能真的在那一行的末尾有一个尾随空格。这样做的结果是:
ECHO%stuff%>文件
,它看起来比
ECHO%stuff%>文件
更好,但在每行末尾都添加了一个空格。事实上,如果您使用
echo,那么每次运行我的代码时都会添加额外的空间!第一线!>txt,而不是echo!第一线!>test2.txt
。您的观察是正确的,我还通过使用以下行解决了这个问题(考虑空间):
如果“!firstline:~-2!”=”\“SET firstline=”!第一行:~,-2。非常感谢你的帮助,我很感激@杰夫克-听到这个消息我很惊讶。我本以为需要
如果“!firstline:~-2!”==”
如果“!firstline:~-2,1!”==”