SHELL関数でコマンドの実行結果をファイルへ吐き出したいのですが

解決


二松 ゆき美  2003-07-11 01:17:20  No: 107750

SHELL関数で実行した結果をログとしてファイルへ吐き出そうと思うのですが
良い方法はありませんでしょうか?

Shell("command.com /c dir > aaa", 6)

と書いたところ、エラーは発生しないのですが(0が返らない)
ファイルは作成されず、コマンド自体も上手く動いてないように思われます。
ちなみに、コマンドプロンプトで

command.com /c dir > aaa

とすると、ちゃんとファイルは作成されます。

ご教授宜しくお願いいたします。

Win2000  
Excel97  VBA


ぢゃわ  2003-07-11 02:25:59  No: 107751

そのShell文で正常に実行されているはずです。
Shell文は実行が完了するとプログラムのタスク ID を返します。
戻り値が0でないのはそのためです。

結果ファイルaaaは特にパスが指定されていないので、プログラムと
同じフォルダ(プログラムの作業フォルダ)あたりにできている
のではないでしょうか?
プログラムを保存しない状態で実行しているならVBをインストール
してあるフォルダあたりに・・・

同じようにdir関数もパスを指定しないと作業フォルダのファイル群を
返してくれます(^-^;

以上のあたりを確認してみて下さい。


二松 ゆき美  2003-07-11 02:58:58  No: 107752

ご指摘ありがとうございました!

Shell("command.com /c dir > C:\aaa",6)

と書き直したら、ちゃんとログファイルをとることができました。
初歩的なミスで大変申し訳ありませんでしたm(__)m

------------------------------------------------------------------

同じ質問を続けてしてしまいます。
上記のことを確認しながら、
次はFTP転送のファイルを動かそうとしたのですが
また、同じような状況に陥ってしまいました。

Shell("ftp -s:"C:\aaa\bbb\ftpsend.bat" > "C:\aaa\bbb\ftpsend.log"",6)

と、書いたのですが転送先のファイルには送信できておらず、
ログファイルも作成されませんでした。
同じ事を何度も聞いてしまって本当に申し訳ありませんが、
ご教授宜しくお願いいたします。

ftp -s:"C:\aaa\bbb\ftpsend.bat" > "C:\aaa\bbb\ftpsend.log"
↑は、文字列変数に格納しています。

プログラム

WaitAppFullName="ftp -s:" & Chr(34) & "C:\aaa\bbb\ftpsend.bat" & Chr(34) _
                  & " > " & Chr(34) & "C:\aaa\bbb\ftpsend.log" & Chr(34)
IDProcess = Shell(WaitAppFullName, 6)

C:\aaa\bbb\ftpsend.batの内容
*****************************************
OPEN abcdef
test
test
TYPE ascii
CD /tmp/
PUT "C:\aaa\bbb\20030605.zem"
PUT "C:\aaa\bbb\20030701.mee"
PUT "C:\aaa\bbb\20030701.mel"
GET 20030605.zem C:\aaa\bbb\20030605.zemg
GET 20030701.mee C:\aaa\bbb\20030701.meeg
GET 20030701.mel C:\aaa\bbb\20030701.melg
BYE
*******************************************

Win2000  
Excel97  VBA


ぢゃわ  2003-07-11 03:39:20  No: 107753

たしかに、FTP直実行だと出せないですね・・・
でもコマンドプロンプト経由でftpを実行すれば出せました。

Shell("command /c ftp -s:""C:\aaa\bbb\ftpsend.bat"" > ""C:\aaa\bbb\ftpsend.log""",6)

パイプはコマンドインタプリタの機能だからということなんでしょうか('-'?
よくわからないのですが、とりあえず報告まで。(汗


二松 ゆき美  2003-07-11 04:59:21  No: 107754

ご教授ありがとうございました!
確かにコマンドプロンプトを介したらうまくいきました。
ただ、command.comが使えなかったので、cmd.exeを使いました。
原因はWindows2000だからか、ExcelVBAだからかわ不明ですが…

プログラム

Shell("md.exe /c ftp -s:""C:\aaa\bbb\ftpsend.bat"""_ 
        &  "> ""C:\aaa\bbb\ftpsend.log""",6)

丁寧に付き合って下さって本当にありがとうございましたm(__)m


二松 ゆき美  2003-07-11 05:00:44  No: 107755

すみません。
プログラムの貼り付けミスです。
md.exe  →  cmd.exe

プログラム

Shell("cmd.exe /c ftp -s:""C:\aaa\bbb\ftpsend.bat"""_ 
        &  "> ""C:\aaa\bbb\ftpsend.log""",6)

お騒がせしました…


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加