2012-01-31 6 views
1

で見つかった行の一部を交換して、この文字列の一部を次の方法で交換する:CMDスクリプトを見つけると私はmyfile.txtの単語を含む「MyWord」内のすべての行を見つける必要があるファイル

オリジナルラインを:後

...,31-01-2012,00,some_words_and_symbols_and_digits,MyWord,... 

置き換える:

...,31-01-2012,01,some_words_and_symbols_and_digits,MyWord,... 

をしてください、私はこのCMDスクリプトを書くために役立ちます!

OK ..私は次のコードを持っている:

@echo off 
set code=MyWord 
set req=new request 

FOR /F "usebackq delims=, tokens=1,2,3,4,5,6,7,8,9*" %%a in (MyFile.txt) do (

IF %%h==%code% (
    SET tempstr=%%a,%%b,%%c,%%d,60,%%f,%%g,%%h,%%i 
    ) ELSE (
    SET tempstr=%%a,%%b,%%c,%%d,%%e,%%f,%%g,%%h,%%i 
    ) 

IF %%a==%req% (
    SET echo %%a >> new.strings 
    ) ELSE (
    echo %tempstr% >> new.strings 
    ) 

) 
@echo on 

をそして私のような私のファイルに何かを持っている:

new request 
...,31-01-2012,01,some_words_and_symbols_and_digits,MyWord,... 
new request 
...,30-11-2011,01,some_words_and_symbols_and_digits,OtherWords,... 

しかし、その後、私は持っているエラー:

ELSE was unexpected at this time. 

とIF私は最後にシンプルにしようとしています

IF %%a==%req% SET tempstr=%%a 
echo %tempstr% >> new.strings 

は、その後、私はあなたが指定したテキストを含む行をフィルタリングするfindコマンドを使用することができる代わりに、他の他の

+0

私はあなたの編集に対応して私の答えを編集しました。次回は、stackoverflowが回答した質問の編集についてユーザーに通知しないので、通知としてコメントを残してください。 – MBu

答えて

1

の唯一の最後の行を持っています。ご覧のとおり、このファイルはCSVです。したがって、for /fを使用して、見つかった行を解析することができます。次に、あなたが望むフィールドを置換するすべての解析されたファイルechoすることができます。

これは、あなただけのいくつかの行に値を交換したい場合は、for /fループ内ifコマンドを使用することができ、「01」

@echo off 
for /f "usebackq delims=, tokens=1,2,3,4,<put as many as you need>" %%A in (`find "MyWord" myfile.txt`) do echo %%A,%%B,01,%%D,<as many %%letters as tokens> 

で3番目の列のすべての値を置き換えます。

==== EDIT

問題がreq変数の値です。そう

IF %%a==new request (

%%anewに等しい場合、それはrequest (echo ......)を実行してからELSE本当に予想外であるだろう。文は次の形式を持っている場合は、2番目の置換後のように、それは、スペースが含まれています。 %%a%req%の両方を引用符で囲むと問題が解決します。

しかし、他の問題もあります。まず、2番目のif文に冗長setがあります。 第2に、変数の遅延拡張を使用する必要があります。そうしないと、echo %tempstr%が機能しません。

あなたのコードの後に​​必要な変更:

@Echo off 
setlocal enabledelayedexpansion 

set code=MyWord 
set req=new request 

FOR /F "usebackq delims=, tokens=1,2,3,4,5,6,7,8,9*" %%a in (MyFile.txt) do (

    IF %%h==%code% (
    SET tempstr=%%a,%%b,%%c,%%d,60,%%f,%%g,%%h,%%i 
) ELSE (
    SET tempstr=%%a,%%b,%%c,%%d,%%e,%%f,%%g,%%h,%%i 
) 

    IF "%%a"=="%req%" (
    echo %%a >> new.strings 
) ELSE (
    echo !tempstr! >> new.strings 
) 
) 

endlocal 
関連する問題