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
)

何が起こるか見てみましょう(コードxxdでファイルを視覚化することですhex):

> model-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.macin this statement: !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

この行を変更

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

これに、末尾のスペースを削除します。

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