C++でMS-DOSプロンプトのdirコマンドを実行する方法

このQ&Aのポイント
  • C++でMS-DOSプロンプトのdirコマンドを実行するプログラムを作成する方法について教えてください。
  • C++で作成したプログラムによってMS-DOSプロンプトが起動し、dirコマンドが実行されるファイルを作る方法を教えてください。
  • C++のプログラムを使ってディレクトリ構造を出力し、MS-DOSプロンプトで実行する方法について教えてください。
回答を見る
  • ベストアンサー

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 コピー元 コピー先 という簡単な書式だから、ファイルコピーを自動化するプログラムも 簡単に作れそうだなと思ったんです。

  • A__
  • お礼率59% (194/328)

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

  • ベストアンサー
  • kokucho81
  • ベストアンサー率61% (157/255)
回答No.3

Borland系であれば、 #include <stdlib.h> #include <cstring.h> int main(int, char** argv) { *argv++; // まず自分のプログラム名はパス // 後々の独自の拡張を考えてMemcopy などは使わない string s="dir "; while (*argv) { s += *argv++; s += ' '; } system(s.c_str()); return 0; } #include <cstring.h> は #include <string> が現在は本流。

A__
質問者

お礼

ありがとうございます。 ソースを教えてもらえないと分からないんです。 教えていただいたソースはこの後試してみて 結果をまたここに書きます。

A__
質問者

補足

ソースをコンパイルして実行して、DIRの結果が表示されました。 短いけど難しいソースなんですねー。 MS-DOSプロンプトを使う原型が分かりました。 ありがとうございます。

その他の回答 (2)

回答No.2

質問の文章を読んでいて思ったのですが、 MS-DOSプロンプト=C言語 C++言語=Windowアプリ と思ってやしませんか? C++言語でコンソールアプリを書くこともできますよ。 且つ、VC++に関して言えば(VC++5では辛いけど)VC++6ではMFCを使ったコンソールアプリも簡単に出来ます。

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.1

1.バッチファイル経由 DIRコマンドを記述したバッチファイルを作成 ShellExecuteなどで作成したバッチファイルを起動 (バッチファイルを動的に作ればどんな処理でも可能) 2.system()関数 Cの標準関数systen()にMS-DOSコマンドを引数で渡す (MS-DOSプロンプトのウィンドウは表示されない) 3.command.comを直接起動 MS-DOSコマンドはcommand.comと言うプログラムが処理するのでcommand.comに直接コマンドを渡せば実行可能。 command.comはCreateProcess()で起動。 etc... 方法はいくらでもあります。 以下,老婆心ながら… コピーならCopyFile(),ディレクトリリストならFindFirst()FindNext()FindClose()など便利なAPIがいっぱいあるのでそれを使って自前でウィンドウ描画した方がエラー処理とか楽です。 MD-DOSプロンプトでエラーが起こった時に対応するのは大事ですから。

A__
質問者

補足

ありがとうございます。 でも、教えてくれたことが理解できず、ソースは作れませんでした。

関連する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とやると フォルダ名、ファイル名しかコマンドプロンプトの画面には表示されません。 気づいたはいいんですが、解決方法が分かりません。 どなたか、コマンドに詳しい方、ご教授ください。 よろしくお願いします。

  • DOS/V Ver6.xx のDIRコマンド

    MS-DOS/V Ver6.xxのDIRコマンドで教えてください。 オプションなしで、ただ単に  dir のコマンドを打った場合、出力される順番はどういった順番になってるのでしょう?  ファイル名のアルファベット順?  拡張子のアルファベット順?  タイムスタンプ順? 3000個のファイルを持つディレクトリで  dir > list.txt でリダイレクトしてみたところ、上記のいずれでもなかったのですが、DOSはどういった順番で 出力してるのでしょう? よろしくお願いします。

  • dirコマンドの出力で、.と..を非表示にする方法

    こんにちは。 コマンドプロンプトでdirコマンドを実行すると、 カレントディレクトリを意味する「.」 と 親ディレクトリを意味する「.. 」がいつも表示されて邪魔なのですが、 これを非表示にする方法はありますでしょうか?

  • エクセルの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でなくてもできた記憶があります。 よい方法があれば教えてください。 よろしくお願いします。

  • C言語でMS-DOSプロンプト入力でプリンタに出力する方法は?

    OS/Win98でVC++を使ってC言語を学習している初心者です. C言語のプログラムでMS-DOSプロンプト上のコマンド入力において プリンタに出力する方法を知りたいです. たとえばMS-DOSプロンプト上で C:>[プログラム名][ファイル名(XXX.txt)] と入力すればプリンターにおいて、入力した[ファイル名(XXX.txt)]が 出力されるようなプログラムを作成したいです. 主にプログラムの流れをどのようにすれば良いか知りたいです. 宜しくお願いします.

  • MS-DOSプロンプトの基本コマンド教えてください。

    MS-DOSプロンプトの基本コマンド(ディレクトリの削除、ファイルの削除、ディレクトリの移動、ファイルのコピー等)の基本コマンドを教えて頂けませんか。 コマンドリストが載せてあるホームページなどあれば教えて頂きたいのですが。 よろしくお願いします。

  • [コマンドプロンプト] dirで見えるのに、renできない

    とても困っていて、質問させていただきます。 コマンドプロンプトでdirを叩くと、ファイル一覧が表示される状態です。 ファイルサイズなども、表示されています。 ところが、リネームしようとすると、 「指定されたファイルがありません」と言われてしまいます。 これらのファイルは、デジカメで撮影した画像で、CFに入っています。 PCでプレビュー、リネーム、ディレクトリ移動ができなかったもので、 コマンドプロンプトから見てみたのですが、 やはりリネームできないようなのです。 対処法をご存じの方、ぜひご教示下さいませ?

  • FTPコマンドについて

    OSは2000Serverを使っています。コマンドプロンプトから入力するFTPコマンドにつき、二つ質問があります。 (1)ローカル(自分の端末)のあるディレクトリ配下すべてのディレクトリ・フォルダまるごとをFTPでアップロードしたい際、コマンドでなんと入力すればよろしいですか? (mput *ではすべてのファイルを転送するもののディレクトリは転送しないためmkdirでディレクトリを作成し、それぞれにmputするということしかできないのでしょうか?) (2)ログインするとC:に自分がいます。!dirでC直下のディレクトリを見るとたくさんありますが中でもDocuments and SettingsとProgram Filesについてはlcdで場所を移動できません。デスクトップにあるファイルを転送したいときなど、Documents and Settingsの下にいく必要がありますがどうすれば移動できますか?

  • コマンドプロンプトでのワイルドカードによるコピー

    こんにちは、よろしくお願い致します。 コマンドプロンプトにおいて Dirというディレクトリの下に、Dir1、Dir2、・・・DirNのようにN個のディレクトリがあったとします。 この時Dir1、Dir2、・・・DirNの直下にあるすべてのファイルだけ、つまり Dir\Dir1\* Dir\Dir2\* ・・・ Dir\DirN\* を、一気にカレントディレクトリにコピーしようとして cp Dir\*\* . としても、上手くいきませんでした。 (Dir1などのディレクトリごとをコピーをするのではない) どうやら、ディレクトリの名前にワイルドカードを使うことができないようでした。 何かいい方法はありませんでしょうか?

  • dir /s で再解析ポイントが含めないようにする

    こんにちは。 コマンドプロンプトのdirコマンドで、、/a:-l というオプションを付けると、 出力されるファイルやフォルダの一覧に、再解析ポイントは含まれません。 再解析ポイントとは、dirコマンドを実行した時に <JUNCTION>という属性が付いているもので、ジャンクションとも呼ばれます。 WindowsVistaやWinodws7の場合、例えば、 C:\Users\ユーザー名\My documentsやC:\Users\ユーザー名\SendToなどが、 再解析ポイントとして存在しています。 これらは、C:\Users\ユーザー名 で、dir /a:l というコマンドを実行すると、確認する事ができます。 dirコマンドには、ディレクトリを再帰的にサーチして表示するために、 /sオプションが用意されています。 dir /a:-l というコマンドでは、再解析ポイントは表示されないのですが、 dir /a:-l /s というコマンドだと、再解析ポイントまで、処理対象になってしまいます。 では、dir /s を使う時に、再解析ポイントを処理対象に含めないようにするには、 一体どうすればよいのでしょうか? 何か御存じの方がいらっしゃれば、是非、情報を提供して頂きたく思います。 では、よろしくお願い致します。