Delphiでバッチファイルのような処理をさせようとしています。
xcopyなんかは、やり方が分かっているのですが delやrmdirなどの
コマンドの起動の仕方がわかりません。
s := '"a:\xxxx\*.*" "b:\yyyy\"';
ShellExecute(handle,nil,PChar('C:\WINDOWS\system32\xcopy.exe'),PChar(s),nil,SW_NORMAL);
何方かご存知の方教えて頂けませんか。
よろしくお願いします。
こんなの?
var
cmd: string;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
StartupInfo.cb := SizeOf(TStartupInfo);
//コマンドプロンプトウィンドウを非表示に
StartupInfo.dwFlags := StartF_UseShowWindow;
StartupInfo.wShowWindow := SW_Hide;
//DOSのコマンドを実行
cmd := 'command.com /c dir > c:\temp.txt';
if CreateProcess(nil,
PChar(cmd),
nil,
nil,
False,
0,
nil,
'c:\',
StartupInfo,
ProcessInfo) then begin
WaitForSingleObject(ProcessInfo.hProcess, Infinite);
CloseHandle(ProcessInfo.hProcess);
end;
end;
manbonさん早速のご回答ありがとうございます。
以下(dir)は動くのですが
cmd := 'command.com /c dir > c:\temp.txt';
これ(del)が動きません。
CreateProcessを呼びに行って戻って来ません。
(勿論ファイルも消えません)
cmd := 'command.com del d:\test\aaa.exe';
カレントディレクトリ('c:\')もいろいろ変えて見ましたが同じです。
何かやり方が悪いのでしょうか。
お手数ですが、もう少し教えて下さい。
すみません、訂正です。
CreateProcessを呼びに行って戻って来ません。
では無く
WaitForSingleObjectを呼びに行って戻って来ません。
でした。
これではどうですか?
cmd := 'command.com /c del d:\test\aaa.exe';
動作確認版
cmd := 'command.com /c del d:\test\aaa.exe > c:\temp.txt';
manbonさん、ありがとうございます。
原因がわかりました。
cmd := 'command.com /c del d:\test\aaa.exe' の中の
/c ですね。
これが無いと戻って来ないようです。
comand.comのオプションの事をうっかりしていました。
非常に助かりました。
ツイート | ![]() |