Windows批处理文件,等待命令完成?

4

我似乎无法弄清楚这个问题。

我正在创建一个实时网站并将其部署在线上。

批处理文件:

START cmd /K "runas /user:administrator & cd C:\users\MyName\dropbox\!!GIT_HUB_REPOS_ALL\tangycode.github.io & hexo generate & hexo serve --draft"


START /wait "" http://localhost:4000/

执行命令hexo generate & hexo serve --draft大约需要5-10秒,时间会有所变化。理想情况下,在前往http://localhost:4000之前,我希望等待该过程完成。

但某些原因,这个Windows批处理命令会立即打开localhost:4000。

2个回答

7
我会使用/B来保持在同一进程中,/wait等待第一个命令完成。除非有更多的命令需要跟随,否则您不需要在第二行中使用/wait。如果这样不起作用,请尝试省略cmd /K。由于runas是可执行文件,并且批处理程序等待它完成,因此您可以完全省略start命令。
如果所有这些方法都不起作用,请插入5个ping命令,这是等待约1秒钟的传统方法。
START /B /wait "runas /user:administrator & cd C:\users\MyName\dropbox\!!GIT_HUB_REPOS_ALL\tangycode.github.io & hexo generate & hexo serve --draft"


START /B "" http://localhost:4000/

我尝试运行这个程序,但我的命令提示符只是静静地坐在那里,什么也不做。没有错误代码或任何提示。 - Vincent Tang
你究竟尝试了什么?我建议您在控制台中先单独尝试运行“runas”部分,然后再尝试将其放入批处理中。 - peter
我在第一次尝试中复制粘贴了您的代码。然后在我的原始文件中,我删除了/wait命令。我还尝试了/B,但由于某种原因它总是在与我的批处理文件相同的文件夹中运行命令。 - Vincent Tang
/K 是我打开新的 cmd 提示符时唯一有效的方法。 - Vincent Tang
打开另一个提示符会导致无法等待其完成,您必须使用ping来计时第二个命令的开始。 - peter

2
我会试着翻译这段内容,但需要注意的是我没有进行测试。

我会试着翻译这段内容,(完全未经测试)

@Echo Off

(Set SrcDir=%UserProfile%\dropbox\!!GIT_HUB_REPOS_ALL\tangycode.github.io)

If Not Exist "%SrcDir%\" Exit/B
Start "" /D"%SrcDir%" /Wait /B RunAs /User:administrator^
 "Cmd /C Start /Wait hexo generate & Start hexo serve --draft"

Start http://localhost:4000/

我尝试运行它,但它要求我输入管理员密码,尽管我是管理员 :s - Vincent Tang
你使用了这个命令,我只是从你的开头帖子中复制了它(除了我无意中使用了大写字母 A 而不是 a,现在已更正)。 - Compo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接