限定しりとり

テキストファイル連結のDOSコマンドについて

あるフォルダに下記の様なテキストファイル群があります
a.txt、b.txt、c.txt、d.txt・・・・

これらをすべて連結するには copy *.txt all.txt とすればいいのですが、一つ一つのファイルの区切りに目に「■■■■■■■■■■■■■■■」のような区切り文字を入れたいのですが何らかの方法はありますでしょうか?

A 回答 (2件)

#1 です。



>最後の一行どういう命令か全く理解できていませんw

締め切っていないので説明しておきますね。

>REM 各テキストファイルの末尾行に区切り文字を加えてマージ
>FOR /F "usebackq delims==" %%i IN (`dir /b *.txt`) DO @type %%i>>all.txt & echo %delim%>>all.txt

FOR /F "usebackq delims==" %%i IN (`コマンド1`) DO コマンド2 %%i

これは「コマンド1の実行結果分、DO以下のコマンド2を繰り返す」と言う意味です。
%%i にはコマンド1の結果が入ります。

今回の場合、コマンド1は dir /b *.txt なので、dirコマンドで取得したテキストファイルの「名前だけ」が %%i に入ります。
1ファイルだけなら1回だけDO以下のコマンド2を処理するし、複数ファイルあるなら、そのファイル数分、繰り返しDO以下のコマンド2を処理します。

DO以下ののコマンド2
type %%i>>all.txt & echo %delim%>>all.txt

「%%i(dir結果のテキストファイル)をall.txtの末尾に追記、その後で更に、%delim%(区切り文字が入った変数)をall.txtの末尾に追記」と言う意味です。
    • good
    • 0

ファイル名やファイル数が、常に固定であれば、「■■■■■■■■■■■■■■■」が1行だけ格納されているファイル delim.txt を作っておいて、



copy a.txt + delim.txt + b.txt + delim.txt ...(中略)... all.txt

で、できます。

この場合、コマンドを生成しないといけないので、ファイルが沢山ある場合は面倒ですけど。

ファイル数、ファイル名が不定の場合は、以下のようなバッチファイルを同じフォルダにおいて実行すれば行けると思います。
(まあ、常にこっちを使えばよいわけですが。。。)

「REM *****..」以下の行をコピーして、addDelimMerge.bat と言うファイルを作成してください。
最後のFOR文は1行です。回答が折り返していたら1行に修正して使用してください。

以下、バッチファイルの中身です。
REM ******************************************************
@echo off
REM バッチ名:addDelimMerge.bat
REM 機能:各テキストの末尾行に区切り文字を加えてマージする
REM ******************************************************

REM 区切り文字の変数
set delim=■■■■■■■■■■■■■■■

REM 前回のall.txtを消しておく
del all.txt

REM 各テキストファイルの末尾行に区切り文字を加えてマージ
FOR /F "usebackq delims==" %%i IN (`dir /b *.txt`) DO @type %%i>>all.txt & echo %delim%>>all.txt
    • good
    • 0
この回答へのお礼

最初はデスクトップにbatファイルを作成実行していたために動作せず。それにやっと気付きcd命令を付加して実行。all.txtができたと喜んだのも束の間で、連結は正常に出来ているのですが区切り文字が挿入されていませんでした。

調べたところ、テキストファイルは文字コードがUTF-8であり、コマンドで付加した文字はシフトJISで、UTF-8では何も表示されなかったようです。とりあえず区切り文字をアスキーの「----------」に変更しましたところ正常に出来ました(*⌒▽⌒*)

しかしコマンドプロンプトもとても奥が深いのですね。目的は達したはいいのですが、最後の一行どういう命令か全く理解できていませんwこれを気にもう少し勉強したいと思います。本当にありがとうございました。

お礼日時:2010/08/26 15:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!