3

私はバッチファイルにまったく慣れておらず、簡単なコマンドをいじくり回しています。テキストを別のファイルに移動したり、行を見つけたりする方法を理解しましたが、既存のテキストファイルに数行のテキストを追加できるようにしたいと思います。これが私がこれまでに持っているものです:

@ECHO OFF
CD C:\Documents and Settings\SLZ1FH\Desktop\New Folder
FOR /F "tokens=*" %%A IN (Examples.txt) DO (
  ECHO %%A
  IF %%A=="Ex3 3"(
    TYPE Line_to_add.txt >> Examples.txt
  )
)

Examples.txtに含まれるもの:

  • Ex1 1
  • Ex2 2
  • Ex3 3
  • Ex4 4
  • Ex5 5

Line_to_add.txtには次のものが含まれます。

  • これはラインです
  • これはキックのためだけの別のラインです!

出力を次のようにしたいと思います。

  • Ex1 1
  • Ex2 2
  • Ex3 3
  • これはラインです
  • これはキックのためだけの別のラインです!
  • Ex4 4
  • Ex5 5

tia :)

解決

@ECHO OFF
FOR /F "tokens=*" %%A IN (Examples.txt) DO (
  ECHO %%A
  IF "%%A" EQU "Ex3" (
    TYPE Line_to_add.txt
  )
) >> temp.txt
move /y temp.txt Examples.txt
4

3 に答える 3

6

わざわざ質問することはありませんが、コードにいくつか問題があります。

1)左側のパレンが比較対象の文字列の一部として扱われるため、IFステートメントが壊れています。パレンの前に少なくとも1つのスペースが必要です。

2)引用符が比較に含まれているため、比較で一致するものが見つかることはありません。値にはスペースが含まれているため、比較の両側を引用符で囲む必要があります。

3)既存のファイルに挿入しようとしていますが、機能しません。コードは、ファイルの最後にテキストを追加するだけです。目的の結果全体を新しい一時ファイルに書き込んでから、一時ファイルを元の名前に移動する必要があります。

まず、ファイルの更新を無視して、画面に正しい出力を取得する方法を示します。

@ECHO OFF
FOR /F "tokens=*" %%A IN (Examples.txt) DO (
  ECHO %%A
  IF "%%A" EQU "Ex3 3" (
    TYPE Line_to_add.txt
  )
)

次に、出力をファイルに送信し、ファイルを目的の名前に移動するのは簡単です。

@ECHO OFF
(
  FOR /F "tokens=*" %%A IN (Examples.txt) DO (
    ECHO %%A
    IF "%%A" EQU "Ex3 3" (
      TYPE Line_to_add.txt
    )
  )
) >temp.txt
move /y temp.txt Examples.txt

バッチ構文とテクニックを学ぶための優れたリソース:

1)すべてのコマンドにはオンラインヘルプがあります。/?コマンド名の後にオプションを追加するだけです。例えば、DIR /?

2)ここに良い情報を持ついくつかのサイトがあります

http://www.dostips.com/
http://judago.webs.com/
http://www.robvanderwoude.com/batchfiles.php

于 2012-05-07T16:24:40.120 に答える
0

FOR / Fを使用してファイル内の行を繰り返し、SET/aを使用してカウンターを作成します。

ファイルの各行についてカウンターを起動するサブルーチンを呼び出してテストします。何らかの価値がある場合は、これまでと同じように新しいデータを挿入します。

これが更新されたスクリプトです。カウンターまたはファイルの内容を使用して、挿入をトリガーできます。また、入力ファイルと出力ファイルの名前が同じ場合も処理します。

@ECHO OFF
set INFILE=Examples.txt
set OUTFILE=Output.txt
set MIXFILE=Line_to_add.txt

set OUTFILEOLD=%OUTFILE%
if NOT "%INFILE%"=="%OUTFILE%" got no_tmp1
set OUTFILE=%OUTFILE%.tmp
:no_tmp1

set counter=0
FOR /F "tokens=*" %%A IN (%INFILE%) do call :process_line %%A

set OUTFILE=%OUTFILEOLD%
if NOT "%INFILE%"=="%OUTFILE%" goto no_tmp2
copy %OUTFILETMP% %OUTFILE%    
:no_tmp2

goto exit

:process_line
set /a counter=counter+1
echo Line %counter% = %*
REM ##IF "%counter%"=="3" goto :adding_line 
IF /i "%1"=="Ex3" goto :adding_line
echo %* >> %OUTFILE%
goto :EOF

:adding_line
echo Adding line
type %MIXFILE% >> %OUTFILE%
goto :EOF

:exit
echo DONE
于 2012-05-07T16:03:10.283 に答える
0
1) create new temp file
2) output to temp
3) delete original
4) rename temp to original

これ以上のことは考えられません。

于 2012-05-07T16:06:53.077 に答える