2013-07-10 500 views
0

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

例如,如果输入文件中的行是“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 
) 

回答

0

如果在列表中犯规包含空格的线条,你可以使用变量substition像

SET str_with_no_spaces=%str: =% 

这意味着什么也没有在%STR%VAR

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 )。如果你看看你的代码,尾部空间出现在这里:echo !str! >> tim-valid-pgm.mac在这个声明:!str! [空间] >>。为了避免这种情况,用更好的代码风格:

@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!后。

0

变化这一行

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

此,删除尾随空间。

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

你的意思是:使长话短说:-) – Endoro

+1

@Endoro呵呵也许你应该已经有了解决方案,那么说明。 – foxidrive