• ベストアンサー
  • 暇なときにでも

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)

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数1174
  • ありがとう数7

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

  • ベストアンサー
  • 回答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> が現在は本流。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

質問者からの補足

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

その他の回答 (2)

  • 回答No.2

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

共感・感謝の気持ちを伝えよう!

  • 回答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プロンプトでエラーが起こった時に対応するのは大事ですから。

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

関連するQ&A

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

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

  • dirコマンドで取得した結果を加工したい。

    お世話になります。 windows上のディレクトリ及びファイル情報を一括で CSV形式で出力したいと思っています。 ご教示ください。 【CSV出力要件】 1カラム目:ディレクトリ若しくはファイルの日付       出力例       (時刻)2017/06/14 17:12 2カラム目:ディレクトリのパス・ファイル名を記載       出力例       (デイレクトリの場合)C:\testdirectory       (ファイルの場合)C:\testdirectory\test.txt 3カラム目:ディレクトリサイズ、ファイルサイズを記載       ディレクトリの場合、配下全ての容量を記載       ファイルの場合、そのファイルサイズを記載 4カラム目:ファイル拡張子を記載 5カラム目:ディレクトリの場合は、Directoryと記載       ファイルの場合は、Fileと記載       ショートカットの場合、shortcutと記載 【設計要件】 ・[dir /S]コマンドで、Windows上のディスク情報を取得する。 ・Linuxのbashで取得結果をCSVに出力する。  ※上記、CSVに出力するファイル名は、windows_dir.csvとする。 ・CSV出力のカラムは前記の通りとする。 ・Dirコマンドで出力される下記を削除する。  1)〇〇個のファイル~バイト(省略)  2)[dir /S]取得結果のファイルの総数:(省略)は削除する。     [dir /S]取得結果の個のファイル~バイト(省略)は削除する。     [dir /S]取得結果の個のディレクトリ~バイトの空き領域(省略)は削除する。  3)[dir /S]取得結果の<DIR>の記述は削除は削除する。  4)ディレクトリの個数をテキストファイルへ出力する    ファイルの個数をテキストファイルに出力する。    個々の拡張子毎にその拡張子の個数をテキストファイルに出力する。    ※上記出力するテキストファイル名は、kakuchoushi.txtとする。  5)[dir /S]取得結果の空白行は削除する。  6)取得時は、開始時刻、終了時刻を記載する。  7)出力結果の文字コードはSJISになっているため、UTF-8に変換する。  8)出力結果の改行コードはCRLFになっているため、LFに変換する。 【留意点】 ・新たに取得し直せばいいのですが、既存の取得済み結果から、  結果を取り出したいと思っております。  ※取得し直しのコメントは無しでお願いいたします。m(_ _)m よろしくお願いいたします。

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

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

  • C++の初歩的な質問

    最近C言語を学び始め、分からないことがあるので質問させてください 1.実行結果をMS-DOSプロンプトで表示させるとき、ひらがななどの全角文字を  表示させようとすると、文字化けしてしまう。MS-DOSプロンプトの設定で、  全角文字を正しく表示させる方法はないのでしょうか? 2.私がテキストとして利用している本では、C++でグラフや図形を描がかせるために、  graphics.h というファイルをインクルードしているのですが、このファイルは  調べたところ昔のファイルみたいで、私のパソコンにはありませんでした。   C++でグラフや図形を描かせることはできるのでしょうか?また、図形を  ファイルへ出力して、保存することはできるのでしょうか? (まだCの経験が少ないため、不適当・論外なことを質問していたらごめんなさい)

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

  • MS-DOS上での日本語入力

    教えてください。 WINDOWSから"MS-DOSプロンプト"を立ち上げてMS-DOS上で日本語が入力 出来ません。DIRコマンド等でディレクトリを表示してみると日本語はちゃんと 表示されます。 当然WINDOWS上では日本語は入力できます。 理由としてどのようなことが考えられますか。 宜しくお願い致します。

  • DELコマンドについて

    皆様是非、御教授ください。 Windows95の「MS-DOSプロンプト」にて "del *.*"を実行した際に次の確認入力を 求めてきます。 「ディレクトリ内のファイルはすべて削除されます よろしいですか(Y/N)?」 これを無効とし、無条件で削除する方法は、 あるのでしょうか?

  • DOSコマンドで日本語名のファイルをコピーしたい

    どうぞよろしくお願いいたします。 Win95が起動しなくなってしまい、dosコマンドを使って必要なファイルだけcopyしようと思っています。 が、必要なファイルの名前を日本語名でつけてしまっているので、dirで調べると「作業管~3.XLS」となってしまっています。 これをcopyしたいのですが、dosコマンドを入力する時の日本語の入力の仕方がわかりません。どのようにすれば漢字が入力できるのでしょうか? また、漢字が無理であれば、更新日付やファイルサイズ等から選択してcopyする方法はありますか? ちなみに、*をつかって「*~3.XLS」と検索してみたのですが、ダメでした。(旧MS-DOSだと*は先頭には使えないと聞いていますが、自分のMS-DOSが旧なのかもわかりません) FUJITSU Biblo NU(3)16 でWin95です。 よろしくお願いいたします。

  • 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 を使う時に、再解析ポイントを処理対象に含めないようにするには、 一体どうすればよいのでしょうか? 何か御存じの方がいらっしゃれば、是非、情報を提供して頂きたく思います。 では、よろしくお願い致します。

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

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