Powershell 批量文件下载并逐个运行多个文件?
我正在尝试创建一个批处理文件,可以一次下载并运行三个文件。其中两个是.bat文件,一个是.exe文件。我正在尝试在.bat文件中使用powershell命令,因为它需要可执行。我正在努力解决这个问题,因为我不熟悉批处理文件和powershellPowershell 批量文件下载并逐个运行多个文件?,powershell,batch-file,Powershell,Batch File,我正在尝试创建一个批处理文件,可以一次下载并运行三个文件。其中两个是.bat文件,一个是.exe文件。我正在尝试在.bat文件中使用powershell命令,因为它需要可执行。我正在努力解决这个问题,因为我不熟悉批处理文件和powershell PowerShell.exe -Command "$url = "https://ufile.io/wqtvx"" PowerShell.exe -Command "$outpath = "$PSScriptRoot/downloadtest.bat""
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进程都是独立的,并且知道在另一个进程中做了什么,您需要将所有代码包含在一个
-命令
参数中,或者使用-文件
并向其传递一个多行powershell脚本
你的下载也会失败,因为链接不是直接指向文件的,它需要你“点击”一个按钮来初始化下载
因此,您将获得一个downloadtest.bat
,其中包含下载页面本身的HTML源代码
一旦您拥有一个带有直接URL链接的filehost,就可以使用分号
在两个命令Invoke WebRequest
和Start 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')"
此脚本的主要问题是,
powershell.exe-c
命令只会在一次powershell迭代后运行代码。一旦完成代码的运行,它就会“关闭”powershell窗口(尝试尽可能简单地解释它)
Powershell能够在简单的命令行上链接命令,类似于批处理&
符号,Powershell具有代码>用于此作业。此外,您的代码仍然无法像James C所说的那样工作-链接不是直接指向文件的,它要求您“单击”按钮以初始化下载
不做广告,但我建议使用GitHub或MediaFire,因为您可以获得每个文件的直接下载链接。无需在网页上进行javascript交互即可下载它们
此脚本将把大多数命令放在一行上,从而允许从powershell下载。此特定命令将适用于所有vs 1.0+的PowerShell。一个简单的start Batchfile.bat将处理其余部分,或者您可以通过添加继续添加到命令中;启动进程-文件路径$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""
Powershell将把您的命令解释为第一个字符串“$url=”,该字符串将返回错误,因为它不是有效的Powershell语法。然后在任何引用之外,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进程。每个变量中定义的变量都将丢失。请您为我更正代码,以便我可以比较并尝试了解问题?请选中以分隔的Add命令代码>。此外,当尝试访问该链接时,下载失败。不确定目标文件存储在哪里…感谢您的建议!将使用Github:)这很有效,谢谢!如何指定保存下载文件的路径?@Mike将'%~dp0downloadtest.bat'
更改为所需的路径。这是前路。%~dp0
只是批处理文件的位置。PS:如果这是一个解决方案,请使用绿色复选标记,以便其他人知道!祝您好运。“%$dp0downloadtest.bat”严格来说是名称,不能用作目录。可以-谢谢。@Mike Yes路径可以是C:\downloadtest.bat
,C:\folder\batch.bat
或其他路径。只要确保你把名字和它一起放在最后。祝你好运!不幸的是,这需要一个文件,做一切,但感谢所有的信息!肯定会有帮助,并会让你随时了解我的进展。
Powershell.exe -ExecutionPolicy Bypass -Command "C:\Path\To\DownloadFile.ps1"