批处理文件:隐藏Powershell在Invoke-WebRequest中的进度条

3

我希望能够编写一个批处理脚本,以隐藏Powershell在Invoke-WebRequest命令中的进度条。我已经尝试过以下方法:

powershell.exe -command "$progressPreference = 'silentlyContinue'"

但是它不起作用。我无法添加更多信息。
这是我的代码:
powershell.exe -command "$progressPreference = 'silentlyContinue'"
powershell -command "INVOKE-WEBREQUEST http://download1502.mediafire.com/blahblah/blahblah2 -OUTFILE %TEMP%\Sibelius751209INStall100.tmp\AvidPF.zip"

为什么一定要是批处理文件呢?直接运行PowerShell脚本不是更简单吗? - undefined
@Tomalak -> 我需要一个批处理文件,因为我有一段很长的批处理代码无法在Powershell中运行。我还尝试创建了一个名为script.ps1的独立文件,并将其放置在桌面上。在我的批处理代码中,我写了start C:\Users\admin\Desktop\script.ps1,但进度条仍然出现。 - undefined
如果您执行$global:progressPreference = 'silentlyContinue'会怎样?(猜测...) - undefined
@Theo -> 仍然不起作用! - undefined
1
问题是你调用了两个不同的PowerShell进程。你必须在一步内设置变量并运行Invoke-WebRequest - undefined
@Tomalak -> 我该怎么做呢?我是批处理和PowerShell脚本的初学者... - undefined
1个回答

2

您调用了两次powershell.exe。在第一个调用中设置的任何变量仅存在于第一个调用中。您必须使用单个调用。

powershell.exe -command "$progressPreference = 'silentlyContinue'; Invoke-WebRequest http://download1502.mediafire.com/blahblah/blahblah2 -OutFile '$Env:TEMP\Sibelius751209INStall100.tmp\AvidPF.zip'"

为了更好地重复使用,我会保存一个 .ps1 文件 download.ps1:

$progressPreference = "silentlyContinue"

$url = $args[0]
$outfile = $args[1]

Invoke-WebRequest $url -Outfile $outfile

并从cmd.exe / 批处理文件中调用它

set "URL=http://download1502.mediafire.com/blahblah/blahblah2"
set "OUTFILE=%TEMP%\Sibelius751209INStall100.tmp\AvidPF.zip"

powershell -File download.ps1 "%URL%" "%OUTFILE%"

我知道在Powershell中,%TEMP%会指向C:\Windows\Temp路径。而$Env:Temp会指向%APPDATA%\Local\Temp路径? - undefined
不,它不会。%TEMP%$Env:TEMP指的是同一个东西 - 名为"TEMP"的环境变量。而且这个环境变量的值对于你启动的所有进程来说都是相同的。前者是cmd.exe的语法,后者是powershell.exe的语法。 - undefined
1
它说$Env:TEMP驱动器不存在。我将其替换为%APPDATA%\Local\Temp,然后它就正常工作了。谢谢你解决我的问题!:D - undefined
当然,这取决于您机器上TEMP设置的值。 - undefined

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