我有一个PowerShell脚本,我想为我的Angular 项目运行它。我只能让它运行第一个命令,或者我只能让它运行第一个命令,然后立即运行第二个命令。
Start /wait /b rmdir node_modules /S Start npm install /b /wait
我已经看过堆栈溢出和谷歌不同的东西,看到了一些很好的建议,但还没有能够让它正确地工作。它目前确实运行第一个命令,然后完成。我试过删除一些参数,如/B或/S,但没有成功。
eufgjt7s1#
cmd.exe
start
rmdir
Start-Process
Remove-Item
Start
因此:
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 /c
cmd /c rmdir /S /Q node_modules
更新:事实证明,您实际上运行的是一个 * 批处理文件 *(.cmd或.bat),而不是PowerShell脚本(.ps1),但上述要点同样适用;批处理文件解决方案是:
.cmd
.bat
.ps1
rmdir /S /Q node_modules npm install
1条答案
按热度按时间eufgjt7s1#
cmd.exe
* 的内部start
和rmdir
命令的语法,这在PowerShell中不起作用。Start-Process
和Remove-Item
的 * 别名 *,因此需要 * 不同的语法 *。Start
命令,改为使用**Start-Process
,但没有理由**使用它作为开始,因为调用cmdlet和(控制台)程序 * 直接 * 在 * 同一控制台窗口 * 中 * 同步 * 执行它们,* 默认情况下 * 输出流连接到PowerShell。因此:
注意:在旧版本的Windows中,包括20 H2之前的Windows 10版本,文件和目录删除本质上是 * 异步 * 的,因此有时删除可能在
Remove-Item
返回时尚未完全完成;通过cmd /c
-cmd /c rmdir /S /Q node_modules
调用似乎可以减少这种情况发生的可能性(但仍然不能完全消除问题)。不幸的是,可靠的解决方案远非微不足道-请参见this answer。更新:事实证明,您实际上运行的是一个 * 批处理文件 *(
.cmd
或.bat
),而不是PowerShell脚本(.ps1
),但上述要点同样适用;批处理文件解决方案是: