下面的程序读取.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
)
答案 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!