SHELL関数で実行した結果をログとしてファイルへ吐き出そうと思うのですが
良い方法はありませんでしょうか?
Shell("command.com /c dir > aaa", 6)
と書いたところ、エラーは発生しないのですが(0が返らない)
ファイルは作成されず、コマンド自体も上手く動いてないように思われます。
ちなみに、コマンドプロンプトで
command.com /c dir > aaa
とすると、ちゃんとファイルは作成されます。
ご教授宜しくお願いいたします。
Win2000
Excel97 VBA
そのShell文で正常に実行されているはずです。
Shell文は実行が完了するとプログラムのタスク ID を返します。
戻り値が0でないのはそのためです。
結果ファイルaaaは特にパスが指定されていないので、プログラムと
同じフォルダ(プログラムの作業フォルダ)あたりにできている
のではないでしょうか?
プログラムを保存しない状態で実行しているならVBをインストール
してあるフォルダあたりに・・・
同じようにdir関数もパスを指定しないと作業フォルダのファイル群を
返してくれます(^-^;
以上のあたりを確認してみて下さい。
ご指摘ありがとうございました!
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
たしかに、FTP直実行だと出せないですね・・・
でもコマンドプロンプト経由でftpを実行すれば出せました。
Shell("command /c ftp -s:""C:\aaa\bbb\ftpsend.bat"" > ""C:\aaa\bbb\ftpsend.log""",6)
パイプはコマンドインタプリタの機能だからということなんでしょうか('-'?
よくわからないのですが、とりあえず報告まで。(汗
ご教授ありがとうございました!
確かにコマンドプロンプトを介したらうまくいきました。
ただ、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
すみません。
プログラムの貼り付けミスです。
md.exe → cmd.exe
プログラム
Shell("cmd.exe /c ftp -s:""C:\aaa\bbb\ftpsend.bat"""_
& "> ""C:\aaa\bbb\ftpsend.log""",6)
お騒がせしました…
ツイート | ![]() |