windows 如何使PowerShell脚本等待第一个命令完成,然后运行第二个命令

qlzsbp2j  于 2022-11-26  发布在  Windows
关注(0)|答案(1)|浏览(427)

我有一个PowerShell脚本,我想为我的Angular 项目运行它。
我只能让它运行第一个命令,或者我只能让它运行第一个命令,然后立即运行第二个命令。

Start /wait /b   rmdir  node_modules /S
 
 Start npm install /b /wait

我已经看过堆栈溢出和谷歌不同的东西,看到了一些很好的建议,但还没有能够让它正确地工作。它目前确实运行第一个命令,然后完成。
我试过删除一些参数,如/B或/S,但没有成功。

eufgjt7s

eufgjt7s1#

  • 您的主要问题是您正在使用 * cmd.exe * 的内部startrmdir命令的语法,这在PowerShell中不起作用
  • 虽然PowerShell确实有名称相同的命令,但它们是PowerShell * cmdlet *、Start-ProcessRemove-Item的 * 别名 *,因此需要 * 不同的语法 *。
  • 虽然您可以修复Start命令,改为使用**Start-Process,但没有理由**使用它作为开始,因为调用cmdlet和(控制台)程序 * 直接 * 在 * 同一控制台窗口 * 中 * 同步 * 执行它们,* 默认情况下 * 输出流连接到PowerShell。

因此:

Remove-Item -Force -Recurse node_modules  # Equivalent of rmdir /S /Q node_modules
npm install

注意:在旧版本的Windows中,包括20 H2之前的Windows 10版本,文件和目录删除本质上是 * 异步 * 的,因此有时删除可能在Remove-Item返回时尚未完全完成;通过cmd /c-cmd /c rmdir /S /Q node_modules调用似乎可以减少这种情况发生的可能性(但仍然不能完全消除问题)。不幸的是,可靠的解决方案远非微不足道-请参见this answer

更新:事实证明,您实际上运行的是一个 * 批处理文件 *(.cmd.bat),而不是PowerShell脚本(.ps1),但上述要点同样适用;批处理文件解决方案是:

rmdir /S /Q node_modules
npm install

相关问题