Compress-Archive手动运行正常,在.bat文件中无法执行的解决求助
解决Bat脚本中无法执行Compress-Archive的问题
Compress-Archive是PowerShell的内置cmdlet,而.bat脚本默认由cmd.exe执行,cmd环境不识别PowerShell专属命令,这就是报错的核心原因。你在命令行能正常执行,是因为当时处于PowerShell环境中,分号分隔的是PowerShell命令序列。
方案一:在Bat脚本中调用PowerShell执行命令
修改Bat脚本中的压缩命令行,通过powershell.exe调用PowerShell环境执行Compress-Archive:
REM Takes DATE as input param if "%1"=="" ( echo Provide DATE as an argument ex. 20230425 exit /b 1 ) else ( set DATA_DATE=%1 echo Accepted. ) REM Zip all data via PowerShell powershell.exe -Command "Compress-Archive .\data\%DATA_DATE%\p* -Force test.zip"
注意:这里把参数-f换成了完整的-Force,PowerShell中两种写法都支持,但完整参数名可读性更好;如果你的路径包含空格,需要给路径加上引号,比如".\data\%DATA_DATE%\p*"。
方案二:将脚本改为PowerShell脚本(更推荐)
既然你已经在使用PowerShell命令,直接将.bat转为.ps1脚本会更适配:
# Takes DATE as input param param( [Parameter(Mandatory=$true)] [string]$DATA_DATE ) Write-Host "Accepted." # Zip all data Compress-Archive .\data\$DATA_DATE\p* -Force test.zip
执行时在PowerShell中运行:.\collect_data.ps1 20230504,如果遇到执行策略限制,可以临时允许执行:powershell.exe -ExecutionPolicy Bypass -File .\collect_data.ps1 20230504
内容的提问来源于stack exchange,提问作者BoomBoxBoy
相关产品推荐
相关产品推荐

