1

テキストファイルの特定の行に変数を書き込み、その行で準備ができているものをすべてオーバーライドする必要があるバッチファイルがあります。ファイルから特定の行を読み取るコードがありますが、それを切り替えて書き込むこともできますか?

行コードの読み取り:

setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in (variables.txt) do (
set /a N+=1
set v!N!=%%a
)
set variable1=!v1!
set variable2=!v2!
set variable3=!v3!
set variable4=!v4!

そのようなエコーを追加しようとしまし%variable1% > !v4!たが、機能しません。

4

3 に答える 3

9

私はそれを考え出した!!これは、必要になる可能性のある他の人のためのコードです。

@echo off
setlocal enableextensions enabledelayedexpansion

set inputfile=variables.txt

set tempfile=%random%-%random%.tmp

copy /y nul %tempfile%

set line=0

for /f "delims=" %%l in (%inputfile%) do (
    set /a line+=1
    if !line!==4 (
        echo WORDS YOU REPLACE IT WITH>>%tempfile%
    ) else (
        echo %%l>>%tempfile%
    )
)

del %inputfile%
ren %tempfile% %inputfile%

endlocal
于 2012-05-22T12:37:56.150 に答える
2

別のオプションは、ファイルを完全に上書きすることです。これを行う部分は次のとおりです。

:saveVars
(
ECHO %v1%
ECHO %v2%
ECHO %v3%
ECHO %v4%
ECHO %v5%
) >variables.txt
GOTO :EOF

つまり、行数が固定されていて、事前にわかっている場合です。そうでない場合は、増分の最後の値をサンプルコードに保存し、変数を保存するときに次のように使用することをお勧めします。

:saveVars
SETLOCAL EnableDelayedExpansion
(
  FOR /L %%i IN (1,1,%N%) DO (ECHO !v%%i!)
) >variables.txt
ENDLOCAL
GOTO :EOF

v1ここでは、 /などの変数はファイルとの同期にのみ使用されると想定してv2います。ファイルが読み取られると、行はそれらの変数に格納され、それらのいずれか(変数)が変更されると、saveVarsサブルーチンを呼び出すだけです。すぐに。使用方法の例を次に示します。

…
SET v2=something
CALL :saveVars
…
SET v4=%somevar%
CALL :saveVars
…

ファイルが小さい場合、書き換えは十分に高速である必要があります。

于 2012-05-22T12:51:42.137 に答える
1

すべてを正しく理解しているかどうかは絶対にわかりませんが、テキスト ファイルの既存の部分をバッチ スクリプトで何かに置き換えたい場合は、最初にすべて (変更された部分を含む) を新しいファイルに書き込んでから、元のファイルを削除し、新しいファイルの名前を元の名前に変更します。

何かが欠けていない限り、すべてを変数に読み込むポイントがわかりません。行を 1 つずつ新しいファイルに書き込み、途中で特定の行の内容を代替テキストに置き換えるだけです。

setLocal EnableDelayedExpansion
>newFile.txt (
  for /f "tokens=* delims= " %%a in (variables.txt) do (
    set /a N+=1
    if !N! == 4 (ECHO substitute text) ELSE ECHO %%a
  )
)
del variables.txt
rename newFile.txt variables.txt

代替テキストをいずれかの行から派生させる必要がある場合は、次のようにすることができます。

setLocal EnableDelayedExpansion
>newFile.txt (
  for /f "tokens=* delims= " %%a in (variables.txt) do (
    set /a N+=1
    if !N! == 1 SET subst_text=%%a
    if !N! == 4 (ECHO !subst_text!) ELSE ECHO %%a
  )
)
del variables.txt
rename newFile.txt variables.txt
于 2012-05-21T21:00:39.640 に答える