以下のような日付データが名前となっているテキストファイルが複数あるとします
20160406.txt
20160407.txt
20160408.txt
・
・
・
テキストデータ内の各文字列はただのログですが、日付は入っていません。
テキストデータの各ファイル名を取得し、ファイル内の各行先頭にファイル名を文字列として追加することは可能でしょうか?
自分には、ファイルの文字列を一括取得してテキストにするだとか、
複数ファイルの中身を結合するバッチだとかを作る程度のことしかできませんでした
ご助力をお願いいたします
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
ベストアンサー
Windowsの場合。組み方は色々あると思います。複雑な処理になるようであれば、tkturboさんもおっしゃってますがWSH
とかPowerShell(バージョンによる)
で組んだほうが良いです。
バッチ処理ではそのまま書き換えることは無理なので一時ファイルに出力してリネームする方法です。
エラー処理などを入れてないので参考程度に。
DOS
1@echo off 2setlocal enabledelayedexpansion 3rem 対象パス 4set TARGET_PATH=C:\foo\ba zzzzzz 5cd /d "%TARGET_PATH%" 6for /f "usebackq tokens=*" %%A in (`dir /B`) do ( 7 set TARGET_FILE=%%A 8 set TEMP_FILE=!TARGET_FILE!.tmp 9 for /f "usebackq delims=" %%B in ("!TARGET_FILE!") do ( 10 echo !TARGET_FILE! %%B >> "!TEMP_FILE!" 11 ) 12 del "!TARGET_FILE!" 13 ren "!TEMP_FILE!" "!TARGET_FILE!" 14) 15cd %~dp0 16endlocal 17
投稿2016/04/06 02:23
編集2016/04/06 05:57総合スコア851
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
とりあえずこんな感じでしょうか。
dos
1@echo off 2for %%A in (*.txt) do call :procfile %%A 3goto :eof 4 5:procfile 6move %1 %~n1.bak 7for /F "delims=" %%A in (%~n1.bak) do echo %~n1 %%A>>%1
ファイルの内容によっては問題が生じるかもしれません。
すでにWindowsではコマンドラインシェルとしてPowerShell
が標準搭載されており、従来の「コマンドプロンプト」より遙かに高機能なので、より複雑なことをするにはそちらのご利用をお勧めします。
WSH
も選択肢としては悪くはないですが、ファイル操作はシェルに比べると面倒です。
投稿2016/04/06 06:04
総合スコア5944
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
(grep を使った例) for file in *.txt ; do grep -H '.*' $file > $file.new done
出力ファイル(.new)の行頭に「ファイル名:」が付きます。
出力ファイルの内容に問題なければリネームするなりしてください。
余談ですが、
操作ログを残すときに、設定ファイルのあるディレクトリで grep . *
とすることがあります。
投稿2016/04/06 01:38
総合スコア12189
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。