2017-01-21 26 views
-1

我想在Pascal中使用这个命令。可能吗?可以用Pascal运行这个Windows命令吗?

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

我尝试这样做:

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

没有DOS了,你运行的是Windows。该命令将由Windows命令外壳“cmd.exe”解释。调用'CreateProcess'来创建一个新的'cmd.exe'过程,将该命令作为参数传递。但是,不要这样做。这真是令人震惊的主意。如果你想复制文件,就这样做。使用系统API来做到这一点。 –

+0

@LetalGamer David Heffernan绝对是对的。我很确定你没有使用DOS(磁盘操作系统),而是Windows命令行。将鼠标指针移动到标记__dos__上或者读取此标记的[info](http://stackoverflow.com/tags/dos/info)。请__edit__您的问题,删除标签__dos__,并更好地使用Markdown语法格式化问题,如帮助页[Markdown编辑帮助](http://stackoverflow.com/editing-help)中所述。如果使用API​​而不是使用命令进程在pascal应用程序中创建文件副本,那绝对会更好。 – Mofi

+0

不建议在FreePascal上直接调用CreateProcess,因为有很多更好的选择:http://wiki.freepascal.org/Executing_External_Programs –

回答

0

你需要在shell执行shell命令。 Exec和朋友没有标准地执行一个shell,所以你需要找到shell(cmd.exe或command.com,取决于你想运行的命令),然后用/ c参数执行它。

最好使用Sysutils.ExecuteProcess,因为它避免了引用exec的一些问题。未经测试的概念代码:

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

您可能要在较新的方法刷到execute programs in Free Pascal

相关问题