質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

5回答

33984閲覧

各文字列の先頭行にファイル名を追加したい

mezzot

総合スコア38

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2016/04/06 01:21

以下のような日付データが名前となっているテキストファイルが複数あるとします
20160406.txt
20160407.txt
20160408.txt


テキストデータ内の各文字列はただのログですが、日付は入っていません。
テキストデータの各ファイル名を取得し、ファイル内の各行先頭にファイル名を文字列として追加することは可能でしょうか?

自分には、ファイルの文字列を一括取得してテキストにするだとか、
複数ファイルの中身を結合するバッチだとかを作る程度のことしかできませんでした

ご助力をお願いいたします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2016/04/06 01:41

使用されている環境(OSなど)をお書きください。
mezzot

2016/04/06 02:03

大変失礼いたしました windowsになります。バージョンは6.1.7601と書かれています。
guest

回答5

0

「ファイル名」を付加じゃなくて、「ファイル名:」を付加で良ければ、さらに簡単にできます。
findstrコマンドにその機能があります。

DOS

1cd /d "対象のディレクトリ" 2for %%A in (*.txt) do ( 3 findstr "^" %%A NUL > tempfile 4 move %%A %%A.bak 5 move tempfile %%A 6) 7```これだとファイル内に空行があっても、特殊文字があっても大丈夫です。

投稿2016/04/06 12:57

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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
umed0025

総合スコア851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mezzot

2016/04/06 02:41

ありがとうございます。おそらくこれは、「ファイル名」の先頭に任意の文字を入れる処理だと思うのですが(もし違ったら申し訳ないです…実行したらそうなりました)、 私がやりたかったのは、「ファイル内容(ログ)」の各行先頭に、「ファイル名」を追加したい、という処理でした。誤解を招き申し訳ありません。 また、WSHとPowerShellについて教えていただきありがとうございます! こちら今まで存じ上げなかったので、どのような違いがあるのか調べて是非導入いたします。
umed0025

2016/04/06 03:46

失礼、ちょっと仕様読み込みを間違ってました。 修正しましたです。バッチだけでやろうとすると小難しくなりますね。
mezzot

2016/04/06 05:37

わざわざご修正までいただき、大変感謝申し上げます… 本当に申し訳ありません… 「各行」の「先頭」にファイル名を追加することはかなわず、どうやらファイル内の最初の一行にファイル名を挿入することができる、という処理のようです。バッチだけでやろうとすると本当に難しい、ということがわかっただけでも本当に恩の字でございますので、これ以上解答は募らず、BAとさせていただきます なお、最終的に、秀丸GREPの「ファイル名をフルパスで出力」を使用して事なきを得ましたので(こんなにバッチを書かせてしまい本当に申し訳ないです)、ご報告申し上げます
umed0025

2016/04/06 05:57 編集

あ、各行でよかったのね・・・失礼。 修正しました。
mezzot

2016/04/06 06:15

何度もご修正いただき恐縮でございます。 誤解を招く表現で大変申し訳ございませんでした。 本当にありがとうございます。こちらで本来の予期通りに作動いたしました。
guest

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

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

タグに「コマンドプロンプト」とあるので、OS=Windowsを想定してみます。
ぶっちゃけ、WindowsのCUIコマンドはUnix系のそれとは比べ物にならないくらい貧弱です。
メンテナンス性も含め、WSHなどを使用する方が有用かもしれません。

投稿2016/04/06 02:01

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mezzot

2016/04/06 02:12

おっしゃるとおり、Windowsになります。コマンドユーザーインターフェースにかなり違いがある、というのは耳にしたことがありますが、あわてすぎて完全に失念しておりました… WSHというのはWindows Script Hostのことでしょうか? これはWindowsにもとから搭載されている機能、というような解釈でよいでしょうか…? こちらでもバッチが作成できるのでしょうか?
mezzot

2016/04/06 05:38

教えていただきありがとうございました! 今回やりたかったことに関してはバッチではなく秀丸GREPでフルパス出力することで自己解決いたしました! ありがとうございます!
guest

0

(grep を使った例) for file in *.txt ; do grep -H '.*' $file > $file.new done

出力ファイル(.new)の行頭に「ファイル名:」が付きます。
出力ファイルの内容に問題なければリネームするなりしてください。

余談ですが、
操作ログを残すときに、設定ファイルのあるディレクトリで grep . * とすることがあります。

投稿2016/04/06 01:38

TaichiYanagiya

総合スコア12146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TaichiYanagiya

2016/04/06 01:41

あ、Linux の sh, bash 系の例です。
mezzot

2016/04/06 02:00

ご回答大変感謝いたします! grep -h コマンドというのがあるのですね! 教えていただいた内容を.batとしてそのままテキストが放り込まれているフォルダに入れて実行したみたのですが、新しいファイルが作成されませんでした どこか変更すべき箇所があるのでしょうか… grep . *という表現は、未熟な私にはどのような違いがあるのかわからず、せっかく教えていただいたにも関わらず完全に理解できないこと無念に思います…精進いたします
mezzot

2016/04/06 05:41 編集

教えていただきありがとうございました! 今回やりたかったことに関してはバッチではなく秀丸GREPでフルパス出力することで自己解決いたしました! ありがとうございます! わたしのほうでもGowというソフトを入手し、コマンドプロンプトでも別コマンドを使えるようにしてみましたが、やはりご回答いただいた内容では作動していないようでした。今後知識を深めまして、Linuxを使用できるまでになりましたら再度チャレンジしてみようと思います! 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問