重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

テキストファイルが入ったフォルダ名に、大事なキーワードが入っており、
フォルダ名の一部、または、全部を、テキストファイル内に(先頭行にでも)書き込みたいのですが、

フォルダが千以上あるので、一括して書き込みしてくれるものが、あればなぁと思います。

例えば、フリーソフトなど、何か方法があるでしょうか?

当方は、EXCELのマクロは、初心者ですが、使えます。
また、秀丸を最近、使い始めましたが、まだ、詳しくありません。

もし何か情報があれば、お教えください。
よろしくお願いいたします。

A 回答 (6件)

ツールにこだわらないということなのでWSH-VBSでやった。

以下がそのスクリプト。表示の都合で先頭に全角空白が入っています。コピーして使用する場合は、全角空白1個を半角空白2個に置換してください。

==== addstring.vbs ここから ====
option explicit

CONST EXT = "txt"
CONST SEP = "■"

' ディレクトリtargetのテキストファイルの先頭に文字列を追加する.
sub addstring(target)
 dim file, stream, src, addstr, subdir
 for each file in target.files
  if fso.getextensionname(file.name) = EXT then
   fso.copyfile file.path, file.path & ".bak" ' 念のためにバックアップ

   ' 追加する文字列
   addstr = SEP & split(file.parentfolder.name, SEP,3)(2)

   ' 確認用の表示(なくてもかまわない)
   ws.echo file.path & " の先頭に '" & addstr & "' を追加します."

   ' 元のファイルの内容を取得
   set stream = file.openastextstream(1)
   src = stream.readall
   stream.close

   ' 文字列を追加してファイルに書き込む
   set stream = file.openastextstream(2)
   stream.write addstr & vbcrlf & src
   stream.close
  end if

  set stream = nothing
 next

 ' サブディレクトリがあれば再帰処理
 for each subdir in target.subfolders
  addstring subdir
 next
end sub

dim ws, args, fso, scandir

set ws = WScript
set args = ws.arguments

' 引数が与えられなかったときは終了
if args.count = 0 then
 ws.echo "使い方: cscript adddirname.vbs scandir"
 ws.quit
end if

set fso = createobject("Scripting.FileSystemObject")
set scandir = fso.getfolder(args(0))
addstring scandir
==== addstring.vbs ここまで ====

コマンドプロンプトで次のように実行します。
 cscript addstring.vbs scandir

scandirはテキストファイルが存在するディレクトリです。サブディレクトリがあればそれ以下のファイルも処理します。以下の例ではc:\hogeを指定してあげれば1.txt~5.txtをすべて処理します。
 C:\
 └─hoge
   ├─01234■500円・山田 花子■090726定 商品■
   │   1.txt
   │   2.txt
   │
   └─01235■1800円・佐藤 さとる■090727代引 商品■
       3.txt
       4.txt
       5.txt

親ディレクトリ名にsep(今回は'■')が2個以上含まれない場合はエラーになります。したがってc:\hogeにpiyo.txtというファイルがあった場合、親ディレクトリの名前は'hoge'なのでエラーになります。

希望どおりかわからないので、一部のテキストファイルをテスト用のディレクトリにコピーしてテストしてください。最低限の仕様で作ったのでエラーが出るかもしれません。その場合はエラー状況を書いてまた補足してください。

この回答への補足

わざわざプログラムを作ってくださったなんて、
本当にありがとうございます!

Dドライブの直下に、
・テキストファイルが入ったフォルダ (フォルダ名:test_200907)と
・addstring.vbs
を置いた場合、

コマンドプロンプトで
d:\cscript addstring.vbs d:\test_200907
と入力するのかなと思ったのですが、

'd:\cscript'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

というエラーになってしまいました。

何か、プログラムを動かすソフトウエアを購入して、
インストールすることが、必要なのでしょうか?

作っていただいたプログラムを、テキストファイルに入力して、
「全角スペース」を「半角スペース2個」に置換して
「addstring.vbs」という名前で保存するだけでは、だめだったのでしょうか?

補足日時:2009/08/01 11:42
    • good
    • 0
この回答へのお礼

現在のディレクトリにプログラムを置いて、起動したところ、
見事にできました!
すべてのテキストファイルの先頭に、フォルダ名の一部が追加されています。
すごいです!

私のために、わざわざ、素晴らしいプログラムを作ってくださって、
本当にありがとうございました!

お礼日時:2009/08/02 22:52

> コマンドプロンプトで


> d:\cscript addstring.vbs d:\test_200907
> と入力するのかなと思ったのですが、
>
> 'd:\cscript'は、内部コマンドまたは外部コマンド、
> 操作可能なプログラムまたはバッチ ファイルとして認識されていません。

cscriptの本体(というのかな)はcscript.exeです。Win2kだと'c:\winnt\system32'にありました。Vistaは持ってないのでわかりませんが、'C:\windows\system32'かな。

ということで'cscript'の前の'd:\'は不要です。これだとcscript.exeがD:\にあるということになりますから。試しにコマンドプロンプトを開いて、'cscript'とだけ入力してみてください。WSHのバージョンが表示されたら使えるようにはなってます。特にインストールするものはありません。

バージョンが確認できたら、もう一度
 cscript addstring.vbs d:\test_200907
と実行してみてください。今度はできると思います。

それでもうまくいかなかったらまた補足してください。
    • good
    • 0
この回答へのお礼

現在のディレクトリにプログラムを置いて、起動したところ、
見事にできました!
すべてのテキストファイルの先頭に、フォルダ名の一部が追加されています。
すごいです!

私のために、わざわざ、素晴らしいプログラムを作ってくださって、
本当にありがとうございました!

お礼日時:2009/08/02 22:48

「Greplace」テキスト一括検索・置換ソフト


http://www.vector.co.jp/vpack/browse/pickup/pw5/ …

単純なテキストの検索・置換以外に「カスタム置換」という機能が付いています。
これは、メディア情報(ファイル名や、作成日時、ファイルのパスなど)を置換対照として含めることが出来るという機能です。
このソフトの検索・置換で「正規表現を使う」設定にすると
置換文のメニューの中に「ファイル情報 > 親ディレクトリのパス」とういのが出てきます。
(親ディレクトリ=親フォルダです)

これで親フォルダ名とそのパスをテキスト先頭に一括して書き込むことが出来ます。

端折った書き方ですが、操作のポイントだけを書いてみます。
(1)詳細オプションで「正規表現を使う」、対象として「中身」を指定。
(2)検索文の入力、右の三角をクリックして出てくるメニューから「ゼロ幅表明 > 文頭 \A」を選んで入力。
(3)置換文の入力、右の三角をクリックして出てくるメニューから「ファイル情報 > 親ディレクトリのパス ${file:parent-path}」を選んで入力。
ここで文頭にいれた親ディレクトリのパスでいったん改行したいときは末尾に \n(改行)を足してください。
${file:parent-path}\n

試してみてください。私のテストでは成功しました。
念のため、バックアップをとってから処理するようにしてください。

フォルダ名以外のパス部分が邪魔な場合は、一括置換で消してしまえばいいと思います。
そうすれば親フォルダ名だけが一行目に残ることになります。
    • good
    • 0
この回答へのお礼

ご回答いただき、ありがとうございます。

正に、やりたいことができるソフトのようで、「これは!」と思ったのですが、
残念ながら、Vistaに対応していないようで、起動できませんでした。

残念です…。

貴重な情報を教えていただきまして、ありがとうございました。

お礼日時:2009/08/01 08:18

できそうな気はする。

だけど不明な点があるので具体的なことが書けない。以下の点について補足するべきだと思う。

> フォルダ名の一部、または、全部を、
一部でも全部でもどちらでもいいのか。または、一部の場合と全部の場合があるのか。一部を取り出す場合、そのルールは?具体的なサンプルがあるといいですね。

> テキストファイル内に(先頭行にでも)書き込みたいのですが、
先頭行がいいんですか?末尾でもかまわない?

> 例えば、フリーソフトなど、何か方法があるでしょうか?
>
> 当方は、EXCELのマクロは、初心者ですが、使えます。
> また、秀丸を最近、使い始めましたが、まだ、詳しくありません。
ということなので、ツールには特にこだわらないということですね?

以上の補足をお願いします。

この回答への補足


> > フォルダ名の一部、または、全部を、

> 一部でも全部でもどちらでもいいのか。
> または、一部の場合と全部の場合があるのか。
> 一部を取り出す場合、そのルールは?
> 具体的なサンプルがあるといいですね。

フォルダ名の全部でもOKです。
一部が可能なら、もっとありがたいです。

フォルダ名は
01234■500円・山田 花子■090726定 商品■
01235■1800円・佐藤 さとる■090727代引 商品■
などのようになっており、

■090726定 商品■
■090727代引 商品■
の部分
(フォルダ名の2個目の■から末尾まで)
がテキストファイルに書けると、一番助かるのですが…。


> > テキストファイル内に(先頭行にでも)書き込みたいのですが、

> 先頭行がいいんですか?末尾でもかまわない?

末尾で問題ありません。


> ツールには特にこだわらないということですね?

ツールにはこだわりません。


もし、何か方法がありましたら、ぜひ、お教えください。
よろしくお願いいたします。

補足日時:2009/07/30 11:14
    • good
    • 0

フォルダ名の一覧を出力するツールです


http://www.vector.co.jp/soft/winnt/util/se325080 …
    • good
    • 0
この回答へのお礼

ご回答いただき、ありがとうございます。

今回は、千個ぐらいのフォルダがあり、
各フォルダに1~5個程度のテキストファイルがあり、
各テキストファイルの中のどこかに、フォルダ名を記入したかったのですが、

便利そうなソフトを教えていただき、ありがたいです。
早速インストールしました。

教えていただきまして、ありがとうございました!

お礼日時:2009/07/30 11:12

ひとつのテキストファイルにフォルダのリストをまとめて記入したたいのですか?



それともフォルダ一つ一つにちがうテキストファイルがあって
その先頭行に1個1個書き込んでいくのでしょうか?

前者であればかんたんです。
コマンドプロンプトでDIRコマンドというのがあります。
コマンドプロンプトはXPではプログラムのアクセサリに入っています。
指定の場所のフォルダ・ファイル一覧をずらずらっと表示してくれます。
後は結果をコピーして貼り付けるだけ。

たとえばC:\の一覧を表示させたければ

CD C:\

と打ち込んでEnterキーを押すと、対象となるフォルダがC:\に変更されます。
ここで

DIR

と打ち込めば、C:\の内容が一覧表示されます。
右クリックすればすべて選択できますので、コピーしてメモ帳に貼り付けてください。
    • good
    • 0
この回答へのお礼

ご回答いただき、ありがとうございます。

今回は、千個ぐらいのフォルダがあり、
各フォルダに1~5個程度のテキストファイルがあり、
各テキストファイルの中のどこかに、フォルダ名を記入したかったのですが、

C:\の内容をリストアップする、そんな方法があったと知り、勉強になりました。
コマンドプロンプトは、ほとんど使ったことがなかったです。

教えていただきまして、ありがとうございました!

お礼日時:2009/07/30 10:59

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