2016-05-04 17 views
2

別のバッチファイル内の特定の既知の行を編集するバッチスクリプトを探していました。 この解決策(Stackoverflow: Batch - edit specified line in text file)が見つかりました。私がEndoroのスクリプトで唯一問題だったのは、編集したくない行の先頭にあるコロンを削除することだけです。これを避ける方法はありますか? ヘルプが大歓迎です!前もって感謝します!バッチファイル内の1行を編集する

@ECHO OFF &SETLOCAL 

:Input 
    set /p version=Please Enter Version: 


:Replacement 
    SET "file=test.bat" 
    SET /a Line#ToSearch=4 
    SET "Replacement=set jversion = %Version%_x86" 

(FOR /f "tokens=1*delims=: " %%a IN ('findstr /n "^" "%file%"') DO (
     SET "Line=%%b" 
     IF %%a equ %Line#ToSearch% SET "Line=%Replacement%" 
     SETLOCAL ENABLEDELAYEDEXPANSION 
     ECHO(!Line! 
     ENDLOCAL 
    ))>"%file%.new" 
TYPE "%file%.new" 
MOVE "%file%.new" "%file%" 

答えて

0

は、後続の区切り文字を1として扱います。 findstr /Nは、すべての行の先頭に行番号とコロンを付けます。たとえば、3行目が:abcd efの場合、for /F3::abcd efとなります。 2つのトークンを解析すると、3abcd efが得られます。それが先行コロンが消える理由です。

これを解決するには、サブストリング置換構文を使用します。変数Lineに行番号プレフィックス(上記の文字列3::abcd ef)を含む行全体が含まれていると仮定すると、SET "Line=!Line:*:=!"を使用して最初のコロンまでのすべてを削除します(結果の文字列は:abcd efです)。

行番号を取得するには、:のループを別のfor /Fループに使用し、最初のトークンのみを取得します。ここで

は、固定されたスクリプトです:

@ECHO OFF &SETLOCAL 

:Input 
    set /p version=Please Enter Version: 


:Replacement 
    SET "file=test.bat" 
    SET /a Line#ToSearch=4 
    SET "Replacement=set jversion = %Version%_x86" 

(FOR /f "delims=" %%a IN ('findstr /n "^" "%file%"') DO (
     SET "Line=%%a" 
     rem // Use a `for /F` loop to extract the line number: 
     for /F "delims=:" %%N in ("%%a") do set "LNum=%%N" 
     SETLOCAL ENABLEDELAYEDEXPANSION 
     rem // Use sub-string replacement to split off 
     rem // the preceding line number and one colon: 
     SET "Line=!Line:*:=!" 
     IF !LNum! equ %Line#ToSearch% SET "Line=%Replacement%" 
     ECHO(!Line! 
     ENDLOCAL 
    ))>"%file%.new" 
TYPE "%file%.new" 
MOVE "%file%.new" "%file%" 
+0

こんにちはaschipfl、クイックヘルプに感謝します。 私はあなたのアダプテーションをテストして、私はスクリプト自体が今何かを変更しないことに気付きました(おそらく4行目でさえも)。私は何らかのエラーメッセージを受け取ることはなく、スクリプトは ".new"ファイルを作成しています(私は最後の行を削除しました)。 – Flos12

+0

ありがとうございました。スクリプトは今、魅力のように働いています:) – Flos12

関連する問題