2016-12-10 9 views
0

あらかじめ定義されたヘッダーを持つテキストファイルを作成するためにforループを使用していますが、あらかじめ決められたリストの各ファイルの2行目に一意の文字列(alice、bobなど)を追加します。定義済みのリストから特定の文字列を特定の.txtファイルに追加するためのバッチはありますか?

Set a=alice 
Set b=bob 
Set c=chris 

Rem ...etc. (I have about 30 files with a unique name to go in row 2 of each file) 

For /l %%x in (1, 1 , 30) do (echo headerRow1 > file%%x.txt & echo %a% > file%%x.txt) 

は、私は、自動的に(「FILE2.TXT」で。すなわち)2回目の反復のための「ボブ」を挿入し、3回目の繰り返しのための「クリス」、および30個のファイルに対して継続する方法を理解しません。

%a%部分を何回かループして、毎回1​​ずつ増分しますか?これを行うために文字列変数に何を命名すべきですか?これらは正しい質問ですか?

ありがとうございます。

答えて

0

あなたが解決しようとしている問題はforループが一度に設定を反復処理することができたときに、1つのforループでリストの間で繰り返すことができるようにするようです。問題は、配列やリストが第一級市民としてBatchに実際には存在しないという点でより難しいです。

あり、これを解決するための複数の方法がありますが、1つの簡単な方法は、名前をループしており、ループを通るカウンターたびにインクリメントします。 (おそらくfor /lループよりも簡単であり、名前のリストを増やすでしょう)

ここは例です。

@echo off & setlocal enabledelayedexpansion 
set names=alice bob chris 
set x=1 
for %%a in (%names%) do (
    >file!x!.txt (
     echo headerRow 
     echo %%a 
    ) 
    set /a x+=1 
) 

注:すべてのシングルライン上の名前、およびforループはそれらを反復処理することができます設定し

  • 最初にカウンター(x)を設定してから、ループの最後にカウンターを増やします。

  • 私は、代わりに一度の(一度だけ)、ループを通るので、そのバッチは、変数xを解決し、それが通過する最初の時間をするたびに遅れ拡張(setlocal enabledelayedexpansion)と!x!代わりの%x%の構文を使用しています毎回正しい増分値を得るようにします。

私は役に立つと思います。

+0

これはすごく詳細な回答でした。ありがとうございました!あなたは私の金曜日の夜に作った:)私はいつもdelayedexpansionが何をしたのか疑問に思った。 – Glycoversi

0
@ECHO Off 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
SET "targetdir=U:\destdir" 
SET "filename1=%sourcedir%\q40171884.txt" 
SET "headerrow=This is your header" 
SET "line2=This is line two for " 
FOR /f "tokens=1*delims=[]" %%a IN ('find /n /v "" "%filename1%"') DO IF "%%b" neq "" (
>"%targetdir%\file%%a.txt" (
ECHO(%headerrow% 
ECHO(%line2%%%b 
TYPE "%sourcedir%\thefilecontainingtheremainder.txt" 
) 
) 

GOTO :EOF 

あなたの状況に合わせてsourcedirtargetdirの設定を変更する必要があります。

私の名前はq40171884.txtです。

は、出力ファイルに割り当てるデータの本体を格納するファイル"%sourcedir%\thefilecontainingtheremainder.txt"を使用します。当然、これはどこにでもある可能性があります。

は基本的に、あなたの名前を含むファイル名を取り、[sequencenumber]で、各行の前に付けるためにfind /n /v ""を使用しています。 が[]の場合は、接頭辞を%%aに、残りの行(名前)を%%bに割り当てます。

findの最初の行はファイル名を報告しますが、[]は含まれません(あなたが馬鹿になり、そのようにエンジニアリングしない限り)ので、%%bは空になります。私たちはその行をスキップし、他の人は%%aに数字が入り、%%bという名前が入ります。

次に、新しい出力ファイル "ファイル .txt"と2つの特殊な行を作成します.2番目の行には%%b(名前)が追加されます。次に、必要なテキストの残りを単にtypeで逆流させます。

+0

ありがとう、マッー!これはfindコマンドの使い方です。 sojaのメソッドはおそらくもっと使いやすいと思われるので、私は多分sojaのメソッドを使用しますが、私は間違いなくあなたのものをバッチファイルプログラミングのさらなるプラクティスに使用します。お時間をいただきありがとうございます! – Glycoversi

関連する問題