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

このQ&Aに関連する最新のQ&A

A 回答 (1件)

こんにちは。

maruru01です。

確認してませんが、

Str = " COMMAND.COM /C Dir C:\*.mdb /s/b > C:\aaa.txt "
tempID = Shell(Str, vbNormalFocus)

これでどうでしょうか。
では。
    • good
    • 0
この回答へのお礼

できました!ありがとうございます。
自分がやったときは、COMMAND.COMの後の、「/C」がなかったからうまくいかなかったのかな?
今日中に解決してよかったです。助かりました。

お礼日時:2002/03/26 17:48

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC:\Windows> から C:\Windows\Win98>への変更方法

次のMS DOSプロンプトの状態から
C:\Windows>

次のMS DOSプロンプトの状態にしたい。
C:\Windows\Win98>

色々試して見ましたがうまくいきませんので、教えてください。テストした結果は以下の通りです。

C:\Windows> CD \   と入力してEnterします
C:\>CD C:\Windows\Win98  と入力してEnterします

ディレクトリーの指定が違いますと、表示されてうまくいきません。

Aベストアンサー

>C:\>CD C:\Windows\Win98  と入力してEnterします

↑で別に間違ってはいないので、"C:\WINDOWS\win98"ディレクトリが存在しないのでは?

dir c:\windows\win98

で確認してみた方が良いと思います。

QDOSプロンプトとコマンドプロンプトの違いを簡単に教えてください

私自身が素人なのですが、DOSプロンプトとコマンドプロンプトの違いを素人に教えなければなりません。

DOSプロンプトとコマンドプロンプトの違いについて過去にも質問がありますが、更に簡単に、より決定的な違いはあるのでしょうか?

宜しくお願い致します。

Aベストアンサー

ぶっちゃけた話、「違いはない」です。

簡単な「違い」
DOSプロンプト:Windows95 98などいわゆるWindows9x系についているプロンプト。
コマンドプロンプト:WindowsNT 2000 XPなどいわゆるNT系についているプロンプト。
機能は「ほとんど変わりません」一部のコマンドが使えたり使えなかったり、文法が違うものがあるそうです。

ちょっとだけ詳しく言うと、
DOSプロンプト:9x系のWindowsはMS-DOSを拡張して作られています。このベースになっているMS-DOSの部分を操作するCUIがDOSプロンプト。
コマンドプロンプト:WindowsNT以降はMS-DOSとは別に新たに作られたOSなので、DOSプロンプトはありません。でもそれでは不便なので、Windows上で動く仮想的なMSDOSを用意してあります、それを操作するCUIがコマンドプロンプト。

Qc#でコマンドプロンプトを実行する方法

コマンドプロンプト上から音楽ファイルの変換が出来るffmpegを利用して
C#プログラムを作ろうと思い、下記のサイトを参考にしてc#プログラムを作りコマンドを入力してみたのですがうまくいきません。
しかし、同じコマンドをコマンドプロンプトを手動で開いて打ち込むと成功します。

参考にしたサイト:http://dobon.net/vb/dotnet/process/standardoutput.html
入力したコマンド:"E:/ffmpeg.exe" -i "E:/a.m4a" -b:a 320k "E:/a.mp3"
 ※コマンドの-b:a 320kの表記は320kbpsのビットレートで変換するコードです。
 ※a.m4aをa.mp3に320kbpsのビットレートで変換するコマンドになります。

現状をまとめると以下のようになります。
(1)コマンドプロンプトを手動で起動して、以下のコマンドを打ち込むとうまく変換してくれる。
"E:/ffmpeg.exe" -i "E:/a.m4a" -b:a 320k "E:/a.mp3"
(2)しかしこのコマンドを下記のコードで実行すると処理が行われない。
(3)そうなると下記のコード自体に問題があるように思われるが、
下記のコードで"dir c:\"など簡単なコマンドを実行すると成功する。

ダブルクオテーション(")やスペースなどに問題があるのかと思いいろいろと試してみましたがダメでした。
どうすれば下記のコードで"E:/ffmpeg.exe" -i "E:/a.m4a" -b:a 320k "E:/a.mp3"のようなコマンドを実行出来るのでしょうか?
実行する方法、もしくは違うコードで実行する方法などを知っておられる方、ぜひご教授ください!非常に困っております。


---------------------------------------------------------------------------------------------------
■コマンドプロンプトをC#上から実行するコード
http://dobon.net/vb/dotnet/process/standardoutput.htmlのコードの丸写し
---------------------------------------------------------------------------------------------------
//Processオブジェクトを作成
System.Diagnostics.Process p = new System.Diagnostics.Process();

//ComSpec(cmd.exe)のパスを取得して、FileNameプロパティに指定
p.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
//出力を読み取れるようにする
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = false;
//ウィンドウを表示しないようにする
p.StartInfo.CreateNoWindow = true;
//コマンドラインを指定("/c"は実行後閉じるために必要)


//○成功する
p.StartInfo.Arguments = "dir c:\";
//×失敗する
p.StartInfo.Arguments = "\"E:/ffmpeg.exe\" -i \"E:/a.m4a\" -b:a 320k \"E:/a.mp3\";


//起動
p.Start();
//出力を読み取る
string results = p.StandardOutput.ReadToEnd();
//プロセス終了まで待機する
//WaitForExitはReadToEndの後である必要がある
//(親プロセス、子プロセスでブロック防止のため)
p.WaitForExit();
p.Close();

//出力された結果を表示
Console.WriteLine(results);
---------------------------------------------------------------------------------------------------

コマンドプロンプト上から音楽ファイルの変換が出来るffmpegを利用して
C#プログラムを作ろうと思い、下記のサイトを参考にしてc#プログラムを作りコマンドを入力してみたのですがうまくいきません。
しかし、同じコマンドをコマンドプロンプトを手動で開いて打ち込むと成功します。

参考にしたサイト:http://dobon.net/vb/dotnet/process/standardoutput.html
入力したコマンド:"E:/ffmpeg.exe" -i "E:/a.m4a" -b:a 320k "E:/a.mp3"
 ※コマンドの-b:a 320kの表記は320kbpsのビットレートで変換するコー...続きを読む

Aベストアンサー

>うまくいきません。

「なにが」「どう」「いまくいかない」んでしょうか?

プロセス起動した後に無反応になる?
プロセス終了した後に表示されるべきメッセージが表示されない?
プロセス起動できない?
起動したffmpeg.exeが終了しても戻ってこない?

参考ページではcmd.exeに/cオプションを指定しているようですが、
変更されたソースでは指定していないようで…。
その場合、
p.WaitForExit();
でちゃんと戻ってこれるんですかね?
# 起動したcmd.exe自体は終了していないはずですが…
# /Cも/Kも無かった場合ってどういう動作するんですかね?(Windows7 Pro 64Bitでcmd dirとしたら無視されてしまいましたが)

cmd.exe経由でなくても、必要条件満たせばffmpeg.exeの起動は可能と思いますよ。
ffmpeg.exeを利用するフロントエンドアプリなんかもそうしているでしょうし。
「ffmpeg.exe フロントエンド」で検索してみるとアプリは見つかるかと。

QVBScriptの実行完了を待ってからDOSのプログラムを実行したい。

DOSのバッチからVBScriptを実行しています。
VBScriptの実行が完了してから次のDOSコマンドを実行させたいのですが、
START /WAIT SAMPLE.vbs
では
実行完了を待ってくれないみたいです。

どうしたらよいでしょうか?ご教授お願いいたします。

Aベストアンサー

適当なVBScript を書いて試してみましたが、完了待ちしますよ。
ひょっとして、 SAMPLE.vbs でウインドウアプリを起動してたりして、
それが終了してないのに、終了してるとか思ってませんか

SMPLE.vbs を補足していただけますか

QVBSCRIPTでcmd命令(dir)を実行させて

パスはcsvファイルで読みこんで、vbs上で
Set Shell = CreateObject("WScript.Shell")
Shell.Run "cmd /C ""dir \¥xxx\xxxxx\xxxxx"
を実行させてアクセスできなかったパスがぞんざいするならエラーで返して続いて実行してほしいです。
それで最後にログにエラー情報を書く処理をおこないたいです。問題はcmdだとecho %errorlevel%これを使えば
すぐにこげたことを1か0で返してくれますが
vbs上でも可能ですか?

Aベストアンサー

ret = Shell.Run(コマンド, 1, true)
のようにすればアプリケーションから返されるエラーコードを取得できます。
第3引数の true 、は、アプリケーションの実行が終了するまで待つ指定です。省略すると、実行終了を待たないので、ret は、エラーの有る無しに関係なく無条件に0になります。質問文のような場合は、true を指定する必要があります。

ちなみに、
Shell.Exec でコマンドを実行する場合は、
StdIn,StdOut,StdErr(ストリーム) で標準入力、標準出力、標準エラー出力にアクセスできます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報