• ベストアンサー

VBAの「Dir」コマンドを使用してフォルダ名変換を行ったのですが。。

OS:Windows2000 VBA:Excel2003 任意のフォルダを指定し、そのフォルダ内のフォルダ名を全て変換するものを作成しようとしました。 問題点は、「Dir」関数を使用して、任意のフォルダ内のディレクトリを取得する時に、 strFName = Dir("C:\test\", vbDirectory) 上記のコードを実行すると、strFNameには「.」が入ってます。 strFName = Dir() を繰り返し行うと、strFNameには以下 「.」→「..」→「test01」→「test02」… となります。 C:\test\フォルダには「test01」以降のフォルダは存在するのですが、「.」及び「..」は見当たりません。 コマンドプロンプトで、 C:\test>dir で確認すると、「.」「..」が存在します。 しかし、 C:\test>tree では「.」「..」は見当たりません。 このDir("C:\test\", vbDirectory)で取れてくる「.」「..」とは一体何なのでしょうか? カテゴリ違い(Windows OS かも…)の質問かもしれませんが、ご存知の方がいらっしゃいましたら、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

>カテゴリ違い(Windows OS かも…)の質問かもしれませんが そうですね。OSの仕様(ディレクトリを意味する略号)です。 「.」→ カレントフォルダ(カレントディレクトリ):現在位置のフォルダ名をさします。 「..」→ 一つ上(親)のフォルダ(ディレクトリ)をさします。 http://www.denen.org/article/d20000202.xhtml

Rtarou
質問者

お礼

早速のご回答ありがとうございます。 リンクを参考にさせて頂きました。 仕様ということですので、それを考慮したコーディングを行おうと思います。 >>カテゴリ違い(Windows OS かも…)の質問かもしれませんが >そうですね。OSの仕様(ディレクトリを意味する略号)です。 hana-hana3さんもj_nishizさんもご丁寧な回答ありがとうございました。

その他の回答 (1)

  • j_nishiz
  • ベストアンサー率26% (183/697)
回答No.1

「.」はカレントディレクトリを表し、 「..」は一つ上のディレクトリを表します。 コマンドプロンプトで c:\test\test01>cd .. と入れると c:\test\> となります。

Rtarou
質問者

お礼

早速のご回答ありがとうございます。 DOSの仕様のようですね^^;

関連するQ&A

  • コマンド DIRの動作について

    バッチファイルのDIRコマンドでよく分からない事が あるので、ご存知の方、ご教授願います。 あるフォルダ(仮にC:\test\とします。)の中に1行だけ記述された CSVファイルが大量にあります。 これをCOPYコマンドで1ファイルにまとめたいと思います。 しかし、そのフォルダの中にはサブディレクトリがあり、その中にも COPYコマンドの対象としたいCSVファイルがあります。 COPYコマンドはサブディレクトリまで処理対象としてくれない ようですし、サブディレクトリの数は不特定なので、どうしょうかと 困っていたら、あるWebページを見つけました。 ttp://www.fpcu.jp/dosvcmd/bbs/log/copyxcopy/4-1567.html やりたい事はまさにドンピシャで、そのページのコマンドを 自分流に書き換えつつ、完成したのが、以下のコードです。 MKDIR "C:\test2\" XCOPY "C:\test\*.csv" "C:\test2\" /E /Y for /f %%a in ('dir "C:\test\" /b') do XCOPY "C:\test\\%%a\*.csv" "C:\test2\" /E /Y COPY "C:\test2\*.csv" "C:\test2\log.csv" ※変な所で改行が入って見難くなっていたらゴメンナサイ。 上記、コードで試してみた所、WindowsXPでは問題なく動作しました。 しかし、Windows2000で試してみた所、うまく動きませんでした。 PAUSEコマンドを入れて、どんなコマンドが吐かれているのか見たら サブディレクトリを動的に変えようとしてい%%aの中に「ドライブ」 とか「ボリューム」とか入ってくるのです。最初は意味不明でしたが DIRのbオプションを付けない時に、そういう文字がコマンドプロンプト の画面に表示され、それを取得しているんじゃないかという事に 気づきました。ちなみにWindows2000でもDIR C:\test /bとやると フォルダ名、ファイル名しかコマンドプロンプトの画面には表示されません。 気づいたはいいんですが、解決方法が分かりません。 どなたか、コマンドに詳しい方、ご教授ください。 よろしくお願いします。

  • C++ で DIR コマンド

    MS-DOSプロンプトで dir と入力すれば、フォルダ内の 様子がMS-DOSプロンプトに表示されるけど、 C++ で、MS-DOSプロンプトで dir と入力したのと同じ 様にするにはどういうプログラムを作ればいいのですか? 別の言い方で書くと、実行すればMS-DOSプロンプトが 起動し、dir と入力されて dirコマンドが実行される というファイルを作るソースが知りたいんです。 dirコマンドが実行される対象となるディレクトリは どこでもいいんです。 C++ のプログラムでも、ディレクトリ構造を出力することが 出来ると思うんだけど、MS-DOSプロンプトでやってみたいんです。 どうしてそんなことがしたいのかというと、C++ が難しそうだから という理由なんです。 例えば、ファイルコピーを自動化するプログラムを作る時、 C++ のプログラムの出力をMS-DOSプロンプトへ渡す方法を知っていれば、 MS-DOSプロンプトでのコピーは copy コピー元 コピー先 という簡単な書式だから、ファイルコピーを自動化するプログラムも 簡単に作れそうだなと思ったんです。

  • エクセルのVBAからDOSコマンドのDIRを実行したい

    DOSコマンドのDIRコマンドを、エクセルのVBAから実行したいのですがうまくいきません。助けてください。 DOSプロンプト上で、たとえば「DIR c:\*.mdb /s/b > c:\aaa.txt」を実行すると、Cドライブ上の拡張子(MDB)のファイルの一覧を、aaa.txt上に出力できるのですが、それをエクセルのVBAから実行したいのです。 Shell関数で、COMMAND.COMを実行することはできるのですが、それ以降の指定がわかりません。COMMAND.COMを実行した後、DOSプロンプトをアクティブにし、「DIR c:\*.mdb /s/b > c:\aaa.txt」をsendkeyで送れば・・・とアドバイスをうけたりもしたのですが、sendkeyでなくてもできた記憶があります。 よい方法があれば教えてください。 よろしくお願いします。

  • Dirコマンドでフォルダ内ファイルの合計サイズをだすには?(コマンドプロンプトにて)

    いろいろ調べましたが不明な点があり、質問します。 WindowsのDOSプロンプトでdirコマンドを打つとフォルダ・ファイルの一覧が表示されますが、その中にファイルサイズが表示されています。 このサイズを合計できるコマンドはありませんか? DIRコマンドのオプションを調べましたがそれらしいものが見当たりません。 具体的には C:\xxx\配下に50個程度のファイルがあります。 その50個の合計サイズを知りたいです。 xxxフォルダの親フォルダにはアクセス不可です。 ずーっと悩んでいます。よろしくお願いします。 なお、OSはWindowsNTか2000で使用予定です。

  • ftpコマンドで再帰的にフォルダとファイルを見たい

    コマンドプロンプトのftpコマンドを使用して、あるディレクトリ配下にあるフォルダとファイル一覧を再帰的に見たいです。 「コマンド:dir」では、ディレクトリ配下のフォルダ一覧は見れるのですが、フォルダの下にあるファイルまでは見ることができません。 どなたかご教授頂けるとうれしいです。 よろしくお願いします。

  • コマンドプロンプトのdirで見えないファイルの削除

    不正な記号を使ったフォルダ名とファイルが存在し、削除できずに困っています。 現象は以下の通りです。 ・起動時に毎回チェックディスクが行われ、該当のファイル名やフォルダ名が出てくる。 ・エクスプローラーで削除をすると、「ファイルを削除できません。送り側のファイルまたはディスクから読み取れません。」 ・ひとつ上のフォルダごと削除しようとしても、「指定されたファイルが見つかりません。」 ・コマンドプロンプトでdirで見てもファイル/ディレクトリは表示されない。 (「<DIR> .」と「<DIR ..>」のみで0個のファイル、2個のディレクトリと表示) ・ネットで調べたコマンドを使って削除しても「指定されたファイルが見つかりません」「ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。」で削除できない。   del "\\?\<ドライブ名>:\*****\*****\ファイル名"   rd /s "\\?\<ドライブ名>:\*****\*****\フォルダ名" エクスプローラーのドライブのプロパティ→ツールでチェックディスクを、オプションを両方チェックしてまたは片方ずつで行ってから上の作業をしても同じです。 自分で調べてみてもこれ以上の方法が見つからなかったのですが、削除する方法はあるでしょうか?

  • Excel2003VBA Dir関数について

    Excel2003VBAを勉強中の者です。早速ですが質問させて頂きます。 C:\Documents and Settings\All Users\Documents\親フォルダ\の中に複数のフォルダと標準ファイルが混在しており、 フォーム上のコマンドボタンを押す事で、リストボックスにフォルダだけを表示させたく下のコードを作成しました。 動作としては一旦FileDateという配列に、取得したフォルダ名をセットし、それをリストボックスに出力する事としました。 配列FileDateはDir関数でフォルダ名をひとつ取得する度に、1つずつ要素数を増やしております。 自分のフォルダを表す記号”.”と一つ上のフォルダを表す記号”..”は省きます。 このコードを実行してみた結果、”.”と”..”は省く事ができました。 しかし次に標準のフォルダが変数bufに入った状態からエラーが発生してしまいます。 ■エラー発生■の部分で「実行エラー53 ファイルが見つかりません。」と出てしまうのです。 Dir関数が正しく使えていないのだと思います。 ローカルウィンドウで確認しましたが、変数bufにはフォルダ名がちゃんとセットされている事からファイルそのものは認識してくれている様に思えます。 自分なりにかなり調べ、色々と試してみましたがどうにも手に負えませんでした。 エラーの発生原因と対策をご教示頂きたく、どなたかご助力をお願い致します。 Private Sub CommandButton1_Click() Dim buf As String Dim i As Long i = 1 Dim FileDate() As Variant ReDim FileDate(1 To i) As Variant buf = Dir("C:\Documents and Settings\All Users\Documents\親フォルダ\", vbDirectory) Do If GetAttr(buf) And vbDirectory Then '■エラー発生■ If buf <> "" And buf <> "." And buf <> ".." Then FileDate(i) = buf i = i + 1 ReDim Preserve FileDate(1 To i) End If End If buf = Dir() Loop While buf <> "" ListBox1.List = FileDate End Sub

  • VBAで今日の日付のフォルダを作る。

    VBA初心者です。 仕事で急遽EXCEL2000のVBAを使わなくてはならなくなり、本を買って急いで勉強しましたがうまくいきません。 もう日数もなく困っています、どなたかお教え下さい。 VBAでやりたいこと 1.まずTEST.xls上でボタンをつくり、それをクリックすると、TEST.xlsと同じディレクトリに20061119という(ボタンをクリックした日付)フォルダが作成される。 2.そのフォルダの中に、test1.sqlと、test2.sqlいうテキストファイルが作成される。 3.sqlテキストファイルの中身には、どちらも 123(abc/def) 456(ghi/jkl) という内容が書き込まれる。 今のところ散々頑張って、日付名ではないフォルダの中にカラのsqlテキストデータを作るまでしか出来ず困っています(-_-;) どうかよろしくお願いします。

  • フォルダのファイル数をvbaで取得したい

    vbaなのですが、フォルダにgifファイルがたくさんはいっていますが、 その数を数えるコードを教えてください。 今は、 Sub Macro7() Dim File As String Dim i As Long File = Dir("C:\*.*", vbDirectory) Do While File <> "" File = Dir i = i + 1 Loop MsgBox "ファイル数は" & i & "です" End Sub のように、全てのファイル数をカウントして求めています。

  • VBAから.NET DLLを任意フォルダから呼ぶ

    VBAからRegistration-Freeで.NETベースのDLLを、任意のフォルダに置いて呼ぶ方法を教えてください。 https://www.ka-net.org/blog/?p=6198 このサイトではDLLをVBAの実行元(ExcelならEXCEL.EXE)と同じフォルダに置くと動くのですが、任意のフォルダに置いて動かす方法が分かりません。 何卒、ご教授お願いいたします。

専門家に質問してみよう