2017-01-21 4 views
-1

Je veux utiliser cette commande avec Pascal. C'est possible?Est-il possible d'exécuter cette commande Windows avec Pascal?

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

J'ai essayé ceci:

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

Il n'y a pas plus DOS, vous exécutez Windows. Cette commande serait interprétée par le shell de commande Windows, 'cmd.exe'. Appelez 'CreateProcess' pour créer un nouveau processus' cmd.exe' en passant la commande en argument. Cependant, ne faites pas ça. C'est vraiment une idée choquante. Si vous voulez copier des fichiers, faites-le. Utilisez l'API système pour le faire. –

+0

@LetalGamer David Heffernan a absolument raison. Je suis sûr que vous n'utilisez pas DOS (Disk Operating System), mais la ligne de commande Windows. Déplacez le pointeur de la souris sur la balise __dos__ ou lisez [info] (http://stackoverflow.com/tags/dos/info) de cette balise. S'il vous plaît __edit__ votre question, supprimez le tag __dos__ et mieux formater votre question en utilisant la syntaxe Markdown comme expliqué sur la page d'aide [Markdown Editing Help] (http://stackoverflow.com/editing-help). Et il serait certainement préférable de faire la copie de fichier dans votre application pascal en utilisant l'API au lieu d'utiliser un processus de commande. – Mofi

+0

Appeler CreateProcess directement n'est pas recommandé sur FreePascal, car il existe une foule de meilleures options: http://wiki.freepascal.org/Executing_External_Programs –

Répondre

0

Vous devez exécuter des commandes shell sur la coquille. Exec et ses amis n'exécutent pas normalement un shell, vous devez donc trouver le shell (cmd.exe ou command.com, en fonction des commandes que vous voulez exécuter), puis l'exécuter avec un paramètre/c.

Il est préférable d'utiliser Sysutils.ExecuteProcess, car cela évite certains des problèmes liés à la spécification d'exec. Code concept non testé:

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

Vous pouvez rafraîchir sur les moyens nouveaux pour execute programs in Free Pascal