2013-07-10 536 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