Link öffnen, bzw. Datei herunterladen per Batch
Liebes Batch-Team,
ich müsste per Batch-File eine .msi-Datei herunterladen und habe es mit zwei Befehlen versucht, jedoch funktioniert keiner wirklich so wie gewollt.
Wenn man den Link zum Download in den Browser einfügt, wird die Datei sofort heruntergeladen und der Tab danach geschlossen.
Die Datei wird also sofort heruntergeladen und es kann eigentlich nicht am Link liegen.
Als Erstes habe ich folgendes getestet:
Doch da ist einfach nichts passiert...
Danach habe ich es einfach versucht, indem ich den Link so starte:
Dabei wurde aber immer ein Chrome-Tab geöffnet, egal welche Parameter ich dazu angegeben habe.
Hat dazu jemand eine Idee? Würde mich sehr über eine Antwort freuen.
Vielen Dank im Voraus
Liebe Grüße BatchCoder
ich müsste per Batch-File eine .msi-Datei herunterladen und habe es mit zwei Befehlen versucht, jedoch funktioniert keiner wirklich so wie gewollt.
Wenn man den Link zum Download in den Browser einfügt, wird die Datei sofort heruntergeladen und der Tab danach geschlossen.
Die Datei wird also sofort heruntergeladen und es kann eigentlich nicht am Link liegen.
Als Erstes habe ich folgendes getestet:
powershell -Command "Invoke-WebRequest %link% -Outfile %name_der_heruntergeladenen_datei%" >nul
Danach habe ich es einfach versucht, indem ich den Link so starte:
start %link% /B
Hat dazu jemand eine Idee? Würde mich sehr über eine Antwort freuen.
Vielen Dank im Voraus
Liebe Grüße BatchCoder
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 592759
Url: https://administrator.de/contentid/592759
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
6 Kommentare
Neuester Kommentar
Powershell kann das, nur dass der Befehl ein wenig anders ist:
https://www.itnator.net/datei-herunterladen-mit-powershell/
Am einfachsten ist BITS
Gruß Johannes
https://www.itnator.net/datei-herunterladen-mit-powershell/
Am einfachsten ist BITS
Gruß Johannes
Servus,
ich habe mal ein Batch-Script zum Download einer Speisekarte geschrieben.... ist aber schon was älter...
Vielleicht kannst du damit ja was anfangen, wenn es Batch (mit VBS) sein soll.
ich habe mal ein Batch-Script zum Download einer Speisekarte geschrieben.... ist aber schon was älter...
@echo off
set to_download=https://speisemeister.net/tageskarte-pdf.html?tx_webkitpdf_pi1[urls]=https://speisemeister.net/tageskarte.html?type=97
set save_to=c:\users\%username%\Desktop\Tageskarte.pdf
set autoopen=0
rem --------------------------------------------------------------------------------------------
set DLOAD_SCRIPT=download.vbs
echo Option Explicit > %DLOAD_SCRIPT%
echo Dim args, http, fileSystem, adoStream, url, target, status >> %DLOAD_SCRIPT%
echo. >> %DLOAD_SCRIPT%
echo Set args = Wscript.Arguments >> %DLOAD_SCRIPT%
echo Set http = CreateObject("WinHttp.WinHttpRequest.5.1") >> %DLOAD_SCRIPT%
echo url = args(0) >> %DLOAD_SCRIPT%
echo target = args(1) >> %DLOAD_SCRIPT%
echo WScript.Echo "Lade '" ^& target ^& "' von '" ^& url ^& "'..." >> %DLOAD_SCRIPT%
echo. >> %DLOAD_SCRIPT%
echo http.Open "GET", url, False >> %DLOAD_SCRIPT%
echo http.Send >> %DLOAD_SCRIPT%
echo status = http.Status >> %DLOAD_SCRIPT%
echo. >> %DLOAD_SCRIPT%
echo If status ^<^> 200 Then >> %DLOAD_SCRIPT%
echo WScript.Echo "Download fehlgeschlagen: HTTP Status " ^& status >> %DLOAD_SCRIPT%
echo WScript.Quit 1 >> %DLOAD_SCRIPT%
echo Else >> %DLOAD_SCRIPT%
echo WScript.Echo "Download fertig" >> %DLOAD_SCRIPT%
echo End If >> %DLOAD_SCRIPT%
echo. >> %DLOAD_SCRIPT%
echo Set adoStream = CreateObject("ADODB.Stream") >> %DLOAD_SCRIPT%
echo adoStream.Open >> %DLOAD_SCRIPT%
echo adoStream.Type = 1 >> %DLOAD_SCRIPT%
echo adoStream.Write http.ResponseBody >> %DLOAD_SCRIPT%
echo adoStream.Position = 0 >> %DLOAD_SCRIPT%
echo. >> %DLOAD_SCRIPT%
echo Set fileSystem = CreateObject("Scripting.FileSystemObject") >> %DLOAD_SCRIPT%
echo If fileSystem.FileExists(target) Then fileSystem.DeleteFile target >> %DLOAD_SCRIPT%
echo adoStream.SaveToFile target >> %DLOAD_SCRIPT%
echo adoStream.Close >> %DLOAD_SCRIPT%
echo. >> %DLOAD_SCRIPT%
cscript //Nologo %DLOAD_SCRIPT% %to_download% %save_to%
del %DLOAD_SCRIPT%
if %autoopen% EQU 1 start "" %save_to%
Vielleicht kannst du damit ja was anfangen, wenn es Batch (mit VBS) sein soll.
Servus.
Wie die Kollegen schon geschrieben haben gibt es diverse Möglichkeiten eine Datei über Batch, PS &Co. herunterzuladen. Es gibt aber Fälle in denen das nicht so einfach möglich ist bzw. die Seiten die Downloads einschränken.
Auf der Seite des Downloads z.B. kann dieser etwa per JavaScript getriggert werden bzw. eine Umleitung findet per Skript statt, das bekommen die o.g. Methoden natürlich nicht gebacken da sie keine Skripte der Seite parsen. Zusätzlich kann auch eine Prüfung von Cookies gegeben sein. Manche Seiten prüfen auch den User-Agent, dann muss man den bei Invoke-Webrequest ebenfalls über den passenden Parameter anpassen!
Dann wären z.B. in der Powershell auch noch ein paar Hindernisse wie die z.B. die aktiven TLS-Versionen des ServicePointManagers der bei HTTPS Downloads den Download sonst verhindert, was sich mit
im Skript des Downloads ändern lässt um bspw. alle bekannten TLS Versionen zu aktivieren.
Zu den oben genannten Methoden könnten auch noch diverse andere .NET Methoden zum Download genutzt werden wie z.B.
als Batch
Oder auch RAW HTTPWebRequests usw.
Aber wie gesagt bringt das alles nichts wenn der Link nicht direkt die binären Daten der Datei zurückgibt oder über Redirect verlinkt. Sobald ein Skript ins Spiel kommt müsste man sich z.B. per Selenium auf die Seite schalten oder die Seite per Developer Tools im Browser mal ansehen und schauen was für POST oder GET Requests genutzt werden und den tatsächlichen Link herauszufischen. Oder man schreibt sich ein PS Skript das auch das automatisiert aus der Seite ausliest, dito mit Cookie-Handling.
Wie gesagt es gibt viele Wege nach Rom, aber es kommt wie immer auf die Bedingungen an die der Link uns vorgibt und was dann effektiv von den Tools genutzt werden kann und welches nicht.
Grüße Uwe
powershell -Command "Invoke-WebRequest %link% -Outfile %name_der_heruntergeladenen_datei%" >nul
Hochkommata sollte man hier um Datei und URL setzen wegen evt. Sonderzeichen.powershell -EP Bypass -C "Invoke-WebRequest '%link%' -Outfile '%name_der_heruntergeladenen_datei%'"
Wie die Kollegen schon geschrieben haben gibt es diverse Möglichkeiten eine Datei über Batch, PS &Co. herunterzuladen. Es gibt aber Fälle in denen das nicht so einfach möglich ist bzw. die Seiten die Downloads einschränken.
Auf der Seite des Downloads z.B. kann dieser etwa per JavaScript getriggert werden bzw. eine Umleitung findet per Skript statt, das bekommen die o.g. Methoden natürlich nicht gebacken da sie keine Skripte der Seite parsen. Zusätzlich kann auch eine Prüfung von Cookies gegeben sein. Manche Seiten prüfen auch den User-Agent, dann muss man den bei Invoke-Webrequest ebenfalls über den passenden Parameter anpassen!
Dann wären z.B. in der Powershell auch noch ein paar Hindernisse wie die z.B. die aktiven TLS-Versionen des ServicePointManagers der bei HTTPS Downloads den Download sonst verhindert, was sich mit
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::GetNames([System.Net.SecurityProtocolType])
Zu den oben genannten Methoden könnten auch noch diverse andere .NET Methoden zum Download genutzt werden wie z.B.
(New-Object System.Net.WebClient).DownloadFile('URL','C:\dateiname.ext')
powershell -EP Bypass -C "[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::GetNames([System.Net.SecurityProtocolType]) ; (New-Object System.Net.WebClient).DownloadFile('URL','C:\dateiname.ext')"
Oder auch RAW HTTPWebRequests usw.
Aber wie gesagt bringt das alles nichts wenn der Link nicht direkt die binären Daten der Datei zurückgibt oder über Redirect verlinkt. Sobald ein Skript ins Spiel kommt müsste man sich z.B. per Selenium auf die Seite schalten oder die Seite per Developer Tools im Browser mal ansehen und schauen was für POST oder GET Requests genutzt werden und den tatsächlichen Link herauszufischen. Oder man schreibt sich ein PS Skript das auch das automatisiert aus der Seite ausliest, dito mit Cookie-Handling.
Wie gesagt es gibt viele Wege nach Rom, aber es kommt wie immer auf die Bedingungen an die der Link uns vorgibt und was dann effektiv von den Tools genutzt werden kann und welches nicht.
Grüße Uwe