繁体   English   中英

批处理文件逐个下载并运行多个文件?

[英]Batch file download and run multiple files, one by one?

我正在尝试创建一个批处理文件,可以一次下载并运行三个文件。 其中两个是.bat文件,另一个是.exe文件。 我正在尝试在.bat文件中使用powershell命令,因为它需要是可执行的。 我正在努力解决这个问题,因为我不熟悉批处理文件和PowerShell。

PowerShell.exe -Command "$url = "https://ufile.io/wqtvx""
PowerShell.exe -Command "$outpath = "$PSScriptRoot/downloadtest.bat""
PowerShell.exe -Command "Invoke-WebRequest -Uri $url -OutFile $outpath"
PowerShell.exe -Command "$wc = New-Object System.Net.WebClient"
PowerShell.exe -Command "$wc.DownloadFile($url, $outpath)"
PowerShell.exe -Command "$args = @("Comma","Separated","Arguments")"
PowerShell.exe -Command "Start-Process -Filepath "$PSScriptRoot/downloadtest.bat" -ArgumentList $args"

对于我要下载的每个文件,上面的代码将重复三次。 我不太确定在哪里存储我想在线下载的文件,所以我将其上传到免费的文件存储网站。 如果有人能帮助我开展这项工作,我会很感激。

这个脚本的主要问题是powershell.exe -c命令只会在powershell.exe -c一次迭代后运行代码。 一旦它运行完代码,它就会“关闭”powershell窗口(试着尽可能地解释它)。

Powershell能够在简单的命令行上链接命令,类似于批处理&符号,powershell具有; 为了这份工作。 此外,您的代码仍然无法按照James C.的说明工作。 - 链接不直接指向文件,它要求您“单击”按钮以初始化下载。

不要做广告,但我建议使用GitHub或MediaFire,因为您可以获得每个文件的直接下载链接。 网页上无需进行javascript交互即可下载。


此脚本将大部分命令放在一行,从而允许从powershell下载。 这个特殊的命令适用于所有vs 1.0+的powershells。 一个简单的start Batchfile.bat负责其余的工作,或者你可以通过添加继续添加到命令; Start-Process -Filepath $PSScriptRoot/downloadtest.bat -ArgumentList exc ; Start-Process -Filepath $PSScriptRoot/downloadtest.bat -ArgumentList exc ...

Powershell.exe -Command "(New-Object Net.WebClient).DownloadFile('http://Site/Batchfile.bat', '%~dp0downloadtest.bat')"

您正在每条线上开始单独的Powershell过程,因此每条线完全不受另一条线的影响。 这是行不通的,因为你在一行中定义变量并为它们赋值,然后尝试在一个完全独立的过程中使用它们,而这个过程没有这样的变量。 最简单的答案是用双哔声提到的用分号分隔所有语句。

PowerShell.exe -Command "$url = 'https://ufile.io/wqtvx'; $outpath = '$PSScriptRoot/downloadtest.bat'; Invoke-WebRequest -Uri $url -OutFile $outpath; $wc = New-Object System.Net.WebClient; $wc.DownloadFile($url, $outpath); $args = @('Comma','Separated','Arguments'); Start-Process -Filepath '$PSScriptRoot/downloadtest.bat' -ArgumentList $args"

请注意,您的代码中使用了引号。 查看关于第一行中发生了什么的想法的语法突出显示:

PowerShell.exe -Command "$url = "https://ufile.io/wqtvx""

Powershell会将您的命令解释为第一个字符串“$ url =”,它将返回错误,因为它不是有效的Powershell语法。 然后https://ufile.io/wqtvx超出任何引号,Powershell将再次不知道如何解释这个并抛出错误。 最后,你将空字符串“”添加到结尾,这对语句没有任何意义。 在引号中使用单引号,如上例所示。

一般来说,对于一个班轮来说,这么多代码太多了。 它很难阅读和排除故障。 我建议创建一个Powershell脚本,它只是一个带有.ps1文件扩展名的文本文件,并命名为“DownloadFile.ps1”。 在该文件中,输入以下代码:

$url = "https://ufile.io/wqtvx"
$outpath = "$PSScriptRoot/downloadtest.bat"
Invoke-WebRequest -Uri $url -OutFile $outpath
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($url, $outpath)
$args = @("Comma","Separated","Arguments")
Start-Process -Filepath "$PSScriptRoot/downloadtest.bat" -ArgumentList $args

然后从批处理文件中调用以下内容:

Powershell.exe -ExecutionPolicy Bypass -Command "C:\Path\To\DownloadFile.ps1"

每个PowerShell进程是分开并了解已在其他已经完成,你需要或者包含在一个单一的所有代码-Command PARAM,或使用-File并将它传递一个多行PowerShell脚本。

此外,您的下载将失败,因为该链接不直接指向该文件,它要求您“单击”按钮以初始化下载。

因此,您将获得一个downloadtest.bat ,其中包含下载页面本身的HTML源代码。


一旦你有一个带有直接URL链接的文件主机,就可以使用分号; 在两个命令Invoke-WebRequestStart-Process ,它们在一行上:

PowerShell.exe -Command "Invoke-WebRequest -Uri https://filehost.com/directlink/downloadtest.bat -OutFile $PSScriptRoot/downloadtest.bat ; Start-Process -Filepath $PSScriptRoot/downloadtest.bat -ArgumentList @('Comma','Separated','Arguments')"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM