• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBscriptでディレクトリ一覧ファイルを抽出したい。)

VBscriptでディレクトリ一覧ファイルを抽出する方法について

BLUEPIXYの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#2>D:\060713_001_DiskLaundry.vbs(23, 1) Microsoft VBScript 実行時エラー: インデックスが有効範囲にありま せん。: '[number: 3]' えーとですね。 #2のプログラムはあくまで抽出とかXXX前の日付を作って比べるという(質問の内容について)サンプルで書いたもので、そのまま動かして動かないと言われても困ってしまいます。 #1でも書いているように、実際の状況に合わせて修正する必要があります。 もっと汎用的に作ればいいのですが、 こういう状況がある、ああいう状況があるという細かい状況が与えられていませんので、そういった不測の事態を想定したプログラムを作ることは困難です。 今回うまくいかなかった"D:\bat\dirlist.txt"の内容を補足していただけますか? それを見れば、どのように修正をしたらいいのかアドバイスもできると思います。 配列範囲外のエラーについては、 扱うフォルダの構成を "C:\temp\aaa\デイリー\12345\2006年03月 のディレクトリ" のように想定していて "\" で分解しfield という名の配列に格納しています。 例えば "C:\temp\aaa\デイリー\12345\2006年03月 のディレクトリ" の場合で言えば field(0)="C:" field(1)="temp" field(2)="aaa" field(3)="デイリー" field(4)="12345" field(5)="2006年03月 のディレクトリ" の様になります。 なので、エラーが起こった原因は、 フォルダの構成が、プログラムの予想していたものと違ったということだと思います。 例えば、 D:\デイリー\2006年01月 のディレクトリ のようになっていた場合 field(0)="D:" field(1)="デイリー" field(2)="2006年01月 のディレクトリ" のようになって field(3) は作られませんのでエラーになります。 #2のプログラムは、 デイリー、マンスリー 日付のフォルダが同一階層にあることを想定しており また、 "D:\temp のディレクトリ" のようなデータがテキストファイルの内容としてあるということを想定していません。 例えば そういうデータを除くには、 dir %DIR% /S /A:D /D > dirlist1.tmp find "デイリー" dirlist1.tmp > dirlist2.tmp find "マンスリー" dirlist1.tmp >> dirlist2.tmp find " のディレクトリ" dirlist2.tmp > %DIRLIST% del dirlist1.tmp del dirlist2.tmp みたいにすればいいかもしれません。

taffy001
質問者

補足

BLUEPIXYさん 毎回、ご回答いただきまして 本当にありがとうございます。 ご指摘いただいたとおり、 私のbatファイルですと以下の文字列も列挙していました。 -------------------------------------------- d:\temp のディレクトリ -------------------------------------------- BLUEPIXYさんに教えていただいたように batファイル修正を行い、以下がdirlist.txtの内容になります。 ※最初の2行はなんとか削除できないのでしょうか? -------------------------------------------- ---------- DIRLIST2.TMP d:\temp\aaaa\日次\12345\2005年01月 のディレクトリ d:\temp\aaaa\日次\12345\2005年02月 のディレクトリ d:\temp\aaaa\日次\12345\2005年03月 のディレクトリ d:\temp\aaaa\日次\12345\2005年04月 のディレクトリ d:\temp\aaaa\日次\12345\2005年05月 のディレクトリ d:\temp\bbbb\日次\6789a\2005年01月 のディレクトリ d:\temp\bbbb\日次\6789a\2005年02月 のディレクトリ d:\temp\bbbb\日次\6789a\2005年03月 のディレクトリ d:\temp\bbbb\日次\6789a\2005年04月 のディレクトリ d:\temp\bbbb\日次\6789a\2005年05月 のディレクトリ d:\temp\aaaa\月次\12345\2004年07月 のディレクトリ d:\temp\aaaa\月次\12345\2004年08月 のディレクトリ d:\temp\aaaa\月次\12345\2004年09月 のディレクトリ d:\temp\bbbb\月次\6789a\2004年05月 のディレクトリ d:\temp\bbbb\月次\6789a\2004年06月 のディレクトリ d:\temp\bbbb\月次\6789a\2004年07月 のディレクトリ -------------------------------------------- 仮に頭の2行を削除し、 Scriptを動かして見ましたが、 「If DateValue(left(field(5),8)) < baseDate Then」ところで、 「インデックスが有効範囲にありません」とエラーになります。 「\」は左から5つ目の\から文字列8つのyyyy年mm月でよいのかと思っていたのですが。。 よろしくご教授お願いします!

関連するQ&A

  • バッチファイルで一つのファイルをdirで比較し分岐

    バッチファイルでフォルダにある全てのファイルに対し ファイルごとにdir /T:Cとdir /T:Wで比較し 同じならば削除 異なれば何もしない 処理をしたく質問させて頂きました 次のような結果の場合日時が同じなのでファイルを削除する C:\>dir D:\AAA\001.jpg /T:C ドライブ D のボリューム ラベルは microSD です ボリューム シリアル番号は E484-83B8 です D:\AAA のディレクトリ 2012/11/28 12:59 1,284 001.jpg 1 個のファイル 1,284 バイト 0 個のディレクトリ 24,690,798,592 バイトの空き領域 C:\>dir D:\AAA\001.jpg /T:W ドライブ D のボリューム ラベルは microSD です ボリューム シリアル番号は E484-83B8 です D:\AAA のディレクトリ 2012/11/28 12:59 1,284 001.jpg 1 個のファイル 1,284 バイト 0 個のディレクトリ 24,690,798,592 バイトの空き領域 日時が異なるので何もしない C:\>dir D:\AAA\002.jpg /T:C ドライブ D のボリューム ラベルは microSD です ボリューム シリアル番号は E484-83B8 です D:\AAA のディレクトリ 2012/11/07 03:12 1,443,326 002.jpg 1 個のファイル 1,443,326 バイト 0 個のディレクトリ 24,690,798,592 バイトの空き領域 C:\>dir D:\AAA\002.jpg /T:W ドライブ D のボリューム ラベルは microSD です ボリューム シリアル番号は E484-83B8 です D:\AAA のディレクトリ 2012/11/04 17:53 1,443,326 002.jpg 1 個のファイル 1,443,326 バイト 0 個のディレクトリ 24,690,798,592 バイトの空き領域 またもっと簡単にdir D:\AAA /T:Cとdir D:\AAA /T:Wの結果で 分岐処理は可能でしょうか よろしくお願いします

  • Excel VBA サブディレクトリの取得について

    Excel VBA についての質問です。 私は、VBAの初心者です。 フォルダ選択ダイアログを開き、あるフォルダを選択させます。 選択したフォルダ配下のファイルとサブフォルダにあるファイル一覧とそのファイルのパス取得したいです。 【例】D:\TEMP\AAA フォルダを選択 D:\TEMP\AAA  D:\TEMP\AAA\BBB\CCC.txt D:\TEMP\AAA\BBB\DDD\EEE.txt D:\TEMP\AAA\BBB\DDD\FFF.txt GGG.txt が存在する。 まず、フォルダAAAまで選択されたら、 以下の結果がエクセルに出力したいです。 BBB         CCC.txt BBB\DDD        EEE.txt BBB\DDD        FFF.txt               GGG.txt うまく伝えないかもしれないですが、ご教授お願いいたします。

  • 親ディレクトリの更新日付を更新せずにファイルを削除するには

    親ディレクトリの更新日付を更新せずにファイルを削除するには 例えば、以下のディレクトリ構成で「aaa.txt」を削除しても親ディレクトリである「AAA」の更新日付が変更されない方法はありますでしょうか? なお、実装はRHEL5上でのBashスクリプトになります。 /home/hoge/AAA/ => 2010/10/01 06:30:00 /home/hoge/AAA/aaa.txt => 2010/10/01 06:30:00 2010/10/03 12:30:00に以下のコマンドを発行 rm /home/hoge/AAA/aaa.txt /home/hoge/AAA/ => 2010/10/03 12:30:00 に更新されてしまいます。 => 2010/10/01 06:30:00 を保持していたいのです。 できればコマンドのみで解決したいと思っています。 コマンド単体で無理なら、rmで削除する前にディレクトリ情報を一時ファイルへ書き出すしかないと思っています。 以上、よろしくお願いします。

  • ファイル一覧が見たい。

    UNIX系、Solaris、Linuxどちらの場合もあるのですが、 Apacheの公開ディレクトリのファイル一覧を見たいのです。 lsで見るのも、いちいち手間がかかるので、 Windowsのエクスプローラーの様な形式で見られるソフトで、尚且つファイルのパーミッションも全て見えるというのが理想ですが、 理想まで行かなくても、 ファイルの一覧をパッと、ツリー形式で見れるソフトは無いですか? windowsから、ログインして、一覧を抜き出すとか。 linux内で、textに書き出すとか。 どなたか教えて下さい。

  • ディレクトリ一覧作成の高速化

    UNIXで / 配下のディレクトリ一覧をファイル出力することになりました。 今は # find / -type d > /tmp/hoge.txt としてますが、/ 配下のファイル数(ディレクトリも含む)が30万以上もあるため、 一覧を出力するだけで非常に時間がかかります。 ディスクは1マシン辺り30本程ついています。 (この規模のマシンが50台くらい) 後の方法は、ls でドバーっと出力して後からディレクトリだけを抽出する、という 感じくらいかなと思うのですが、もっと早く出力する方法があれば教えてください。 よろしくお願いします。

  • WSHファイルからFTPを利用してダウンロードする

    batファイル,もしくはWSHファイルを使用してのFTPサーバからのファイルダウンロードを行う際の記述方法について質問致します。 行いたいことはFTPサーバ側に日毎のディレクトリが作成され その中に格納されるテキストファイルを自動でローカルの指定ディレクトリに上書きする手順になります。 WSHに関しては全くの素人なので非常に苦戦しております… FTPサーバ側 /@day/*.txt @dayには本日の日付が2桁で入ります。 1月1日なら01、2月23日なら23 Local保存側 D:\temp お手すきの時にでもご教授頂ければ幸いです。

  • コマンドプロンプトでディレクトリ内のファイル一覧をテキストファイルに書き出す

    コマンドプロンプトでディレクトリ内のファイル一覧をテキストファイルに書き出す事が出来たはずなのですが、方法を忘れてしまいました。 例えば dir Aフォルダ 内に 1.gif 2.jpeg 3.eps が入っている場合にコマンドプロンプトにて -------- 1.gif 2.jpeg 3.eps -------- という内要のテキストファイルを作成したいのです。 上記のように3点しかないものなら自力で作成するのですが 5000点ほどある為手作業ではしんどいです。 できれば純粋なファイル名(拡張子なし)で実現できればいいのですが、それが無理なら後はテキスト処理で対応しようと考えています。 識者の方よろしくお願いします。

  • ディレクトリー内のファイル名へのアクセス

    Windows10を使っています。 ファイルエクスプローラーを使ってあるディレクトリーをオープンした時に表示されるファイル名一覧を、テキストとして任意の場所にセーブする方法はありませんか? ご存知の方がいらっしゃいましたら、どうか教えてください。お願いします。

  • VBScriptで削除処理

    初めまして。 VBScriptを今回初めて使用しながらスクリプトを作成しようとしています。 〔質問〕 以下のような削除処理をVBScriptにて実施したいのですが、どのような構文を書けばいいのでしょうか? ご教授お願いします。 以下、例を挙げ記述致します。 (例)処理日が2008/3/22の場合。 「AAAA」ディレクトリ配下の以下のログファイルを二日前までの日付になっているログファイルのみ残し、あとは全て削除するという処理をしたい。 AAAAディレクトリの配下 ・aa080319.log→削除 ・aa080320.log→削除 ・aa080321.log→残す ・aa080322.log→残す 上記例を用いますが、自分で考えた処理フローとしまして、 (1)「AAAA」ディレクトリ配下のファイル一覧をテキストファイルに書き込む。 (2)「(1)」で作成したテキストファイルを読み込み、「2008322」と「2008321」に一致しないログファイルを削除。 以上、宜しくお願いします。

  • バッチファイルでのファイル一覧取得

    初心者です。初めてバッチファイルを作成しようと考えていますが、作成方法がわかりません。 環境はWindwsです。 C:\BディレクトリにAというフォルダがありその中に複数のテキストファイルが保存されています。 そのファイルの一覧をBディレクトリ直下のfile_name.txtへ書き込みたいのですが、dirコマンドでファイルの一覧が取得できるのはわかったのですが、ディレクトリ移動してファイルを書き込む方法がわからず困っています。 更にAフォルダには毎日違うテキストファイルが保存されるため、次回バッチを起動した際にはfile_name.txtの中身をクリアして新規に書き込みをしたいと考えています。 初心者で質問内容に不備があるかもしれませんが、ご教授お願いします。