2017-01-21 24 views
-1

私はパスカルでこのコマンドを使いたいです。出来ますか?あなたはシェル上でシェルコマンドを実行する必要がパスカルでこのWindowsコマンドを実行することは可能ですか?

exec('p:','for /r "%i" in (boom.lpi) do xcopy /Y "%i" "%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"'); 
+1

への新しい方法をブラッシュアップすることがあります、あなたは、Windowsを実行しています。そのコマンドは、Windowsコマンドシェル 'cmd.exe'によって解釈されます。 'CreateProcess'を呼び出して、コマンドを引数として渡す新しい' cmd.exe'プロセスを作成します。しかし、それをしないでください。それは本当に衝撃的なアイデアです。ファイルをコピーしたい場合は、そのようにします。これを行うには、システムAPIを使用してください。 –

+0

@LetalGamer David Heffernanは絶対に正しいです。私はあなたがDOS(ディスクオペレーティングシステム)を使用していないと確信していますが、Windowsコマンドラインです。マウスポインタをタグ__dos__に移動するか、このタグの[info](http://stackoverflow.com/tags/dos/info)を読んでください。ヘルプページ[Markdown Editing Help](http://stackoverflow.com/editing-help)で説明されているMarkdown構文を使用して、質問を__edit__して__dos__タグを削除し、質問のフォーマットを整えてください。また、コマンド・プロセスを使用する代わりに、APIを使用してパスカル・アプリケーションでファイル・コピーを作成する方がよいでしょう。 – Mofi

+0

より良いオプションのホストがあるので、CreateProcessを直接呼び出すのはFreePascalではお勧めできません:http://wiki.freepascal.org/Executing_External_Programs –

答えて

0

for /r %i in (boom.lpi) do xcopy /Y "%i" z:\ 

は、私はこれを試してみました。 Execと友人は標準的にシェルを実行しないので、実行するコマンドに応じてシェル(cmd.exeまたはcommand.com)を見つけてから、/ cパラメータを使用してシェルを実行する必要があります。

Sysutils.ExecuteProcessは、execが持つ引用符の問題のいくつかを回避するため、使用することをお勧めします。未テストのコンセプトコード:

ExecuteProcess(getenvironmentvariable('comspec'),['/c',' for /r %i in (boom.lpi) do xcopy /Y "%i" z:\']); 

あなたは何DOSはもうありませんexecute programs in Free Pascal

関連する問題