3

私が書いた検索と置換のバッチ スクリプトに問題があります。テキスト ファイルを開いて、Windows コマンド ラインから値を変更できるようにする必要があります。sed.exe も FART も powershell もインストールできないので、この方法でインストールする必要があります。Linuxで行うのはとても簡単でした....

これまでのところ、次のスクリプトを作成しました。これは、1 行に 1 単語しかないファイルを使用している場合に完全に機能するため、次の形式のファイルを簡単に変更できます。

ああ
、bbb
ccc

そして、ここにバッチファイルがあります:

@echo off
setlocal enabledelayedexpansion

if not exist "%1" (echo this file does not exist...)&goto :eof

for /f "tokens=* delims=" %%a in (%1) do (

   set write=%%a
   if "%%a"=="%2" set write=%3

   echo !write! 
   (echo !write!)>>%~n1.replaced%~x1
)

del %1
rename %~n1.replaced%~x1 %1

私の問題は、変更する必要があるファイルのほとんどが、次のように文字列と数値の複数の値の行で構成されていることです。

AAA 1.5
BBB 25
CCC 0.1

私のスクリプトがBBB 25BBB 45に変更しない理由を誰か教えてもらえますか? 区切り文字がスペースであることと関係がありますか?スペースで区切られた単語のファイルがある場合、スクリプトも機能しないため、数字とは何の関係もないと確信しています。

私はフォーラムを検索してきましたが、まだこの問題を発見していませんが、検索を続けます. とにかく、あなたの助けは大歓迎です。

更新
問題解決!! DosTips.comで BatchSubstitute.bat のこのリビジョンを見つけ、一時ファイルに余分なエコーを追加するだけで問題が解決しました。私が投稿したコードが機能しない理由がまだわからないので、誰かがそれを説明できれば素晴らしいと思います. 私はまだこれらすべてにかなり慣れていません!!

更新 2
これは、変更する必要がある典型的な入力ファイルです。

k1 1e3
k2 2e5
n 1.5
×10

スクリプト(replace.bat prefs.txt "k1 1e3" "k1 5e4")を実行すると、次のようになります。

k1 5e4
k2 2e5
n 1.5
×10

ファイル内の任意の行を変更できる必要があります。以前の更新のフォーラムのバージョンは機能するようですが、最初に投稿したバージョンが機能しない理由がわかりません。

4

2 に答える 2

1

update2の質問に答えます。

ファイル内の任意の行を変更できるはずです。前回のアップデートのフォーラムのバージョンは機能しているようですが、最初に投稿したバージョンが機能しない理由がわかりません。

これは、線
if "%%a"=="%2" set write=%3
がどの線とも一致しないためです。に展開される
ので、行はに展開されます%2"k1 1e3"

if "%%a"==""k1 1e3"" set write="k1 5e4"

単純なチルダでうまくいくはずです
if "%%a"=="%~2" set write=%~3

于 2012-07-06T16:34:47.727 に答える
0

はい、問題はスペースにあります(テキストをまとめようとする場合は引用符)

のコマンド ラインではtest test.txt BBB 25 BBB 45、%2 は25 が欠落しているため、BBB一致しません。BBB 25

コマンド ラインが のtest test.txt "BBB 25" "BBB 45"場合、%2 は引用符が欠落しているため、"BBB 25"一致しません。BBB 25

于 2012-07-06T16:37:25.547 に答える