如何让WinRAR CLI命令执行完成后再返回命令提示符?
如何让WinRAR CLI命令执行完成后再返回命令提示符?
我太懂你的困扰了——用WinRAR的CLI命令压缩大文件夹时,命令提示符直接就回来了,导致后续脚本步骤提前跑起来,完全没等压缩完成对吧?这其实是因为你用的winrar.exe本质是带GUI的程序,哪怕用命令行调用,它也会启动一个后台的GUI进程干活,而命令行里的winrar.exe进程会直接退出,所以提示符就提前回来了。
给你两个靠谱的解决办法:
方法一:用纯命令行版本的rar.exe
WinRAR安装目录里其实自带了纯命令行工具rar.exe,它默认就是阻塞执行的——必须等压缩完成才会返回命令提示符,而且还会在控制台显示实时进度(和7z的效果一模一样)。
命令格式和你之前的差不多,只是把winrar.exe换成rar.exe就行:
rar.exe a $output_path $input_path
要是找不到rar.exe,它一般在C:\Program Files\WinRAR\目录下,你可以把这个路径加到系统环境变量里,或者直接用完整路径调用,比如:
& "C:\Program Files\WinRAR\rar.exe" a $output_path $input_path
方法二:用PowerShell的Start-Process强制等待
如果你一定要用winrar.exe,可以借助PowerShell的Start-Process命令,加上-Wait参数让脚本强制等待WinRAR进程完成:
Start-Process -FilePath "winrar.exe" -ArgumentList "a $output_path $input_path" -Wait -NoNewWindow
这里的-NoNewWindow是让WinRAR在当前控制台窗口执行(不会弹出单独的GUI窗口),-Wait就是告诉PowerShell必须等这个进程结束再往下走。不过这种方式可能看不到实时进度,要是你需要盯着进度看的话,还是方法一更合适。
另外提醒一下:之前你用的-ibck参数是让WinRAR在后台跑GUI进程,所以肯定会直接返回提示符,以后如果要等完成就别加这个参数啦。
备注:内容来源于stack exchange,提问作者ZYinMD




