2017-02-11 1 views
-2

バットに問題があります。BAT行内のテキストを検索する>すべての行を置換する

@echo off 
setlocal enableextensions disabledelayedexpansion 

set "search=time_upper_limit:" 
set "replace=time_upper_limit: 9999999" 

set "textFile=game.sii" 

for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
    set "line=%%i" 
    setlocal enabledelayedexpansion 
    >>"%textFile%" echo(!line:%search%=%replace%! 
    endlocal 
) 

.batを作成する方法。 は、whithというテキストを見つけてから、行全体を置き換えます。 ファイルの行数が24,000を超えています。 それは彼を連れて行った、ほぼ20分:(; は、より高速な方法で行うことができます。ファイル内

のみ1行がテストでスタートを交換する

行を置き換えるために、「time_upper_limit:」?

+0

? – DavidPostill

+1

このスクリプトは設計どおり動作します。より良いコンピュータを購入する。 – SomethingDark

+0

それはちょうど1行だけで置き換える必要がありますか?または、数行あるかもしれませんか? – Aacini

答えて

-1

I実行時のその種を起こす必要がありますあなたが投稿したスクリプトに何かを見ることができない。を復号化は何とか入力ファイルでめちゃめちゃにしていない限り。

をあなたは空行を必要としない場合は、保存してします3210が正しく、(ぎこちない/有毒文字なし)を復号化され、このようなものでも動作するはずです:

@Echo Off 
Ren "game.sii" "game.bak" 
(For /F "UseBackQ EOL=: Tokens=1* Delims=:" %%A In ("game.bak" 
) Do If "%%A"==" time_upper_limit" (Echo= time_upper_limit: 9999999 
    ) Else If "%%B"=="" (Echo=%%A) Else Echo=%%A:%%B)>game.sii 

は脚注:が浮気されて保存されたゲームの設定を変更します。

+0

このコードは私のファイルでは正しく動作しません – Whater

+0

私のコードはあなたが提供した情報と同じくらい良いです。 'time_upper_limit:'で始まる行を持つ 'クリーン'ファイルがある場合、その行全体を 'time_upper_limit:9999999'に置き換えます。あなたの初期コードは文字列の置換を実行し、このコードは行の置換を行います。後者ではなく前者が機能する場合は、提供した情報が不足していることをお勧めします。私のコードが間違っていると思われる場合は、何が問題なのかを教えてください。結果が正しくなければ、デバッグは不可能です。 – Compo

+0

ところで、あなたの 'game.sii'ファイルを見た後、私はそれに応じてコードを更新しました。あなたの情報が不足していたことは間違いありませんでした。あなたが探していたラインは、単一のスペースから始めるべきでした。 – Compo

0

は、私はあなたの問題は何行にこのコードを変更しようとしたファイルを上書き

set findtext="time_upper_limit: " 
set replace=time_upper_limit: 9999999" 
set findfile="game.sii" 
findstr %findtext% %findfile% 

game.sii

関連する問題