0

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

例如,如果输入文件中的行是“hello”,则在输出文件中它变成“hello”。因为输出文件实际上是一个程序,所以当我运行它时,由于那些尾随空格,我得到了不想要的结果,我想删除尾随空格。

@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
)
4

3 回答 3

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
)

让我们看看会发生什么(xxdhex代码中可视化文件):

>类型模型-tim-valid-pgm.txt
###

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

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

>script.bat ABC123

>类型 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

>类型 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!.

于 2013-07-10T14:15:28.247 回答
0

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

SET str_with_no_spaces=%str: =%

这意味着用 %str% var 中的任何内容替换所有空格字符

于 2013-07-10T12:00:34.747 回答
0

更改此行

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

为此并删除尾随空格。

>>tim-valid-pgm.mac echo !str!
于 2013-07-11T01:22:25.237 回答