当.bat写入.txt文件时删除尾随空格

时间:2013-07-10 11:40:44

标签: batch-file whitespace

下面的程序读取.txt文件并创建另一个文件。在此过程中,输入文件中的字符串将替换为给定值(参数%~1)。一切正常,但输出文件中写入的每一行都被赋予一个尾随的空格。

例如,如果该行是"你好"在输入文件中,它变为"你好"在输出一。由于输出文件实际上是一个程序,当我运行它时,由于那些尾随空格,我得到了一个不希望的结果,我想删除尾随的空格。

@echo off > tim-valid-pgm.mac
setLocal EnableDelayedExpansion
del tim-valid-pgm.mac
set name=%~1
for /f "tokens=* delims= " %%a in (model-tim-valid-pgm.txt) do (
set str=%%a
set str=!str:###=%name%!
echo !str! >> tim-valid-pgm.mac
)

3 个答案:

答案 0 :(得分:4)

这是您的代码,略有修改:

@echo OFF &SETLOCAL ENABLEDELAYEDEXPANSION 
set "name=%~1"
for /f "delims=" %%a in (model-tim-valid-pgm.txt) do (
    set "str=%%a"
    set "str=!str:###=%name%!"
    echo !str! >> tim-valid-pgm.mac
)

让我们看看,会发生什么(xxd是在hex代码中可视化文件):

>type model-tim-valid-pgm.txt
###

>xxd -g1 model-tim-valid-pgm.txt
0000000: 23 23 23 0d 0a                                   ###..

如您所见,model-tim-valid-pgm.txt中没有尾随空格。现在脚本正在运行,并且tim-valid-pgm.mac已成为:

>script.bat ABC123

>type tim-valid-pgm.mac
ABC123

>xxd -g1 tim-valid-pgm.mac
0000000: 41 42 43 31 32 33 20 0d 0a                       ABC123 ..

>for /f "delims=" %a in (tim-valid-pgm.mac) do @echo "%a"
"ABC123 "

现在您可以清楚地看到尾随空格(HEX 20 )。如果您查看代码,则会在此处显示尾随空格:echo !str! >> tim-valid-pgm.mac!str! [SPACE] >>。为避免这种情况,请使用以下代码样式:

@echo OFF &SETLOCAL ENABLEDELAYEDEXPANSION
set "name=%~1"
for /f "delims=" %%a in (model-tim-valid-pgm.txt) do (
    set "str=%%a"
    set "str=!str:###=%name%!"
    >> tim-valid-pgm.mac echo !str!
)

..输出到这里:

>script.bat ABC123

>type tim-valid-pgm.mac
ABC123

>xxd -g1 tim-valid-pgm.mac
0000000: 41 42 43 31 32 33 0d 0a                          ABC123..

>for /f "delims=" %a in (tim-valid-pgm.mac) do @echo "%a"
"ABC123"

现在不能有尾随空格,即使!str!之后的批处理脚本中有一些空格也存在。

答案 1 :(得分:0)

如果列表中的行不包含空格,则可以使用变量替换,如

SET str_with_no_spaces=%str: =%

表示在%str%var

中替换所有空格字符

答案 2 :(得分:0)

更改此行

echo !str! >> tim-valid-pgm.mac

到此并删除尾随空格。

>>tim-valid-pgm.mac echo !str!