del,rmdirなどのコマンドの操作について

解決


MS-DOS  2010-02-25 00:08:10  No: 37747

Delphiでバッチファイルのような処理をさせようとしています。

xcopyなんかは、やり方が分かっているのですが delやrmdirなどの
コマンドの起動の仕方がわかりません。

s := '"a:\xxxx\*.*" "b:\yyyy\"';
ShellExecute(handle,nil,PChar('C:\WINDOWS\system32\xcopy.exe'),PChar(s),nil,SW_NORMAL);

何方かご存知の方教えて頂けませんか。
よろしくお願いします。


manbon  2010-02-25 00:18:00  No: 37748

こんなの?

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;


MS-DOS  2010-02-25 00:51:19  No: 37749

manbonさん早速のご回答ありがとうございます。

以下(dir)は動くのですが
  cmd := 'command.com /c dir > c:\temp.txt';

これ(del)が動きません。
CreateProcessを呼びに行って戻って来ません。
(勿論ファイルも消えません)
  cmd := 'command.com del d:\test\aaa.exe';

カレントディレクトリ('c:\')もいろいろ変えて見ましたが同じです。

何かやり方が悪いのでしょうか。
お手数ですが、もう少し教えて下さい。


MS-DOS  2010-02-25 00:55:34  No: 37750

すみません、訂正です。

CreateProcessを呼びに行って戻って来ません。
では無く

WaitForSingleObjectを呼びに行って戻って来ません。
でした。


manbon  2010-02-25 00:58:10  No: 37751

これではどうですか?
  cmd := 'command.com /c del d:\test\aaa.exe';

  動作確認版
  cmd := 'command.com /c del d:\test\aaa.exe > c:\temp.txt';


MS-DOS  2010-02-25 01:09:36  No: 37752

manbonさん、ありがとうございます。

原因がわかりました。
cmd := 'command.com /c del d:\test\aaa.exe' の中の
  /c ですね。

これが無いと戻って来ないようです。
comand.comのオプションの事をうっかりしていました。

非常に助かりました。


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

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






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