2016-05-12 7 views
0

こんにちは、StackExchangeコミュニティ!バッチを使用して文字列の最初の単語を置き換える方法は?

私は行の最初の単語を他の単語に置き換える問題を解決しようとしています。変換のタイプは単語の最初の文字に依存します。

ポイントまでです。文字列が文字で始まる場合は「s」は、私が希望

w1 616264890454 23.19 14.79 
w1 616264890453 25.11 16.23 
w1 616264890452 24.12 15.73 
w2 616264890451 21.18 16.78 
w1 616264890450 24.19 12.12 
w2 616264890449 21.18 18.98 
w1 616264890448 20.13 15.73 

s272400 616264890454 23.19 14.79 
s272400 616264890453 25.11 16.23 
s272400 616264890452 24.12 15.73 
u272400 616264890451 21.18 16.78 
s272400 616264890450 24.19 12.12 
u292402a 616264890449 21.18 18.98 
s292402a 616264890448 20.13 15.73 

は、私は次のようになりたい: 私は、次の形式でのログファイル(INPUT.TXT)を持っています文字 "u"で始まる場合は、部分文字列の先頭を "w1"に変更します。上記の例のように部分文字列を "w2"に変更します。第1の部分文字列は、異なる長さであってもよい。

私はここにコードを書いた次のようにこのスクリプトの(OUTPUT.TXT)がある

@echo off 
setlocal enableextensions disabledelayedexpansion 
set "Ver_1=s" 
set "Ver_2=u" 
set "Ver_1_res=w1" 
set "Ver_2_res=w2" 
for /f "delims=" %%a in (INPUT.txt) do (
    set var=%%a 
    setlocal enabledelayedexpansion 
    set value_1=%Ver_1% 
    set value_2=%Ver_2% 
    set value_res_1=%Ver_1_res% 
    set value_res_2=%Ver_2_res% 
    set ProgramVersion=!var:~0,1! 

if !ProgramVersion!==!value_1! (
set "var=!value_res_1!" 
echo !var! 
) 
if !ProgramVersion!==!value_2! (
set "var=!value_res_2!" 
echo !var! 
) 
endlocal 
) >> OUTPUT.txt 
pause 

結果を:

w1 
w1 
w1 
w2 
w1 
w2 
w1 

変換作業が、ログからその他の情報を失います。問題はほんのわずかだと確信していますが、すでに長い間、私はそれを解決できません。助けてください!

答えて

1
@echo off 
setlocal enabledelayedexpansion 
(FOR /f "tokens=1,*" %%a IN (input.txt) DO (
    set a=%%a 
    if "!a:~0,1!"=="s" set b=w1 
    if "!a:~0,1!"=="u" set b=w2 
    echo !b! %%b 
))>output.txt 
+0

ありがとう、ありがとうございます! – Just4Droid

0

"set" var =!value_res_1! "または" set "var =!value_res_2!"のようなvarを設定すると、残りの情報が失われます。残りのデータをvarに追加する必要があります。

0

この方法では、置換値を追加または変更する方が簡単です。それはまた、あなたはthis siteでバッチファイル内のアレイの管理を検討することができる...わずかに速い

@echo off 
setlocal EnableDelayedExpansion 

rem Define the replacement values 
set "res[s]=w1" 
set "res[u]=w2" 

(for /F "tokens=1*" %%a in (input.txt) do (
    set "var=%%a" 
    for /F %%c in ("!var:~0,1!") do echo !res[%%c]! %%b 
)) > output.txt 

を実行します。

関連する問題