> ABから、DOSコマンドを実行するにはどのように記述したらいいんでしょうか。
> 例えば、
> NET USE Q: \\SV01\Appli /PERSISTENT:YES /USER:Username PassWord
> をABで実行したいのですが...。
すいませんが、「NET USE」というコマンドに詳しくないので、
「dir hoge* >> hoge.txt」というDOSコマンドを実行する、の例で書きます。
コード: 全て選択
'バッチファイルに、実行するDOSコマンドを書き出す。
Open "DosCommandTemp.bat" For Output As #1
Print #1, "dir hoge* >> hoge.txt"
Colse #1
'書き出したDOSコマンドを実行する。
Exec "DosCommandTemp.bat"
しかし、このコードですと書き出した一時ファイル「DosCommandTemp.bat」が残ってしまいますので、
それが気になる場合には、以下のような方法で解決できると思います。
コード: 全て選択
Dim strTempBat As String
'バッチファイルに、実行するDOSコマンドを書き出す。
strTempBat = "DosCommandTemp.bat"
Open strTempBat For Output As #1
Print #1, "dir hoge* >> hoge.txt"
Colse #1
'書き出したDOSコマンドを実行し、終了まで待機する。
ExecAndWait( StrPtr(strTempBat) )
'動作の終了したバッチファイルを削除する。
Kill strTempBat
'指定されたパスの実行し、動作が終了するまで待機する関数。
'※BackSearchABから転載。「他の起動」で検索した一件目を参照。
Sub ExecAndWait( pszAppPath As BytePtr )
Dim si As STARTUPINFO, pi As PROCESS_INFORMATION
si.cb = Len(si)
CreateProcess( NULL, pszAppPath, ByVal NULL, ByVal NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, si, pi)
CloseHandle(pi.hThread)
WaitForSingleObject(pi.hProcess, INFINITE)
CloseHandle(pi.hProcess)
End Sub
もしくは、上記はN88BASICのコマンド(Openなど)をフルに使ってますので、
それを使わない場合であれば、
こちらの
クラスWsFileReadWriteを使って
(とコレは宣伝^^;)、
以下のような書き方もあります。
コード: 全て選択
/*
※N88BASICコマンドを使わないVer。
上記の関数ExecAndWait()の定義と、クラスWsFileReadWriteの定義を、
コードのどこかにコピーして置いてください。
*/
Dim strTempBat As String
Dim rw As WsFileReadWrite '簡易テキスト読み書き用クラス
Dim retAns As Long
'バッチファイルに、実行するDOSコマンドを書き出す。
strTempBat = "DosCommandTemp.bat"
retAns = rw.SetContents( "dir hoge* >> hoge.txt" ) '書く内容をセット
retAns = rw.WriteContents( StrPtr(strTempBat) ) 'ファイルに書き出す。
'書き出したDOSコマンドを実行し、終了まで待機する。
ExecAndWait( StrPtr(strTempBat) )
'動作の終了したバッチファイルを削除する。
retAns = DeleteFile( StrPtr(strTempBat) )
コード中にコメントを入れておきましたが、コードの流れは分かりますでしょうか?
・・・私でしたら、以上のようなコードでDOSコマンドを扱いますが、
他にもっと簡単な扱い方もあるかもしれませんね^^;