URL decodieren mittels Batch-Aufruf
Habe aktuell ein Problem mit einer Batch-Datei unter DOS (CMD-Aufruf unter Win7/10):
Ziel ist es, ein URL so umzuwandeln, dass daraus ein ASCII-Text wird. Im konkreten Fall habe ich einen Link der so aussieht:
Ziel ist die Ausgabe in folgender Form:
Dazu habe ich mir folgenden "Batch" ausgedacht, um im ersten Schritt erst mal aus dem "%20" ein Leerzeichen bzw. aus dem "%3a" einen Doppelpunkt zu machen:
Leider sieht das Ergebnis nicht so aus wie erwartet:
Da sind also alle "A" getauscht und nicht nur das "%3a" hinter dem Laufwerksbuchstaben (M) und die %20-Wandlung hat mir auch die Laufnummer 01 zerstört.
Gebe ich meinen Ausgangsstring bei http://url-encoder.de/ ein, so geht das problemlos. Wie aber kann ich diese Funktionalität in einem BAT-Script abbilden?
Hat jemand eine Idee dazu?
Ziel ist es, ein URL so umzuwandeln, dass daraus ein ASCII-Text wird. Im konkreten Fall habe ich einen Link der so aussieht:
file:/M%3a/Unsere%20CD%20Sammlung/Achim%20Reichel%20-%20Hei%c3%9fe%20Scheibe%20-%2001%20-%20Er%20w%c3%bcrd%27%20so%20gern%20auf%20Rollschuh%27n%20fahr%27n.mp3
M:/Unsere CD Sammlung/Achim Reichel - Heiße Scheibe - 01 - Er würd' so gern auf Rollschuh'n fahr'n.mp3
@echo off
setlocal enabledelayedexpansion
set url=file:/M%3a/Unsere%20CD%20Sammlung/Achim%20Reichel%20-%20Hei%c3%9fe%20Scheibe%20-%2001%20-%20Er%20w%c3%bcrd%27%20so%20gern%20auf%20Rollschuh%27n%20fahr%27n.mp3
echo "%url%"
pause
set "spa=%20"
set "col=%3a"
set url=%url:~6%
set url=!url:%spa%= !
echo "%url%"
pause
set url=!url:%col%=:!
echo "%url%"
pause
:ende
"M:/Unsere CD S:mmlung/:chim Reichel - Hei9fe Scheibe - 1 - Er wbcrd7 so gern :uf Rollschuh7n f:hr7n.mp3"
Gebe ich meinen Ausgangsstring bei http://url-encoder.de/ ein, so geht das problemlos. Wie aber kann ich diese Funktionalität in einem BAT-Script abbilden?
Hat jemand eine Idee dazu?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 290492
Url: https://administrator.de/contentid/290492
Ausgedruckt am: 26.11.2024 um 10:11 Uhr
11 Kommentare
Neuester Kommentar
Moin,
simpler Powershell-Einzeiler
Gruß grexit
simpler Powershell-Einzeiler
[System.Net.WebUtility]::UrlDecode('file:/M%3a/Unsere%20CD%20Sammlung/Achim%20Reichel%20-%20Hei%c3%9fe%20Scheibe%20-%2001%20-%20Er%20w%c3%bcrd%27%20so%20gern%20auf%20Rollschuh%27n%20fahr%27n.mp3')
Gruß grexit
param([string]$url)
return [System.Net.WebUtility]::UrlDecode($url)
Powershell -Executionpolicy ByPass -File "c:\deinscript.ps1" "DEINEURL"
In einer Batch sind Prozentzeichen Sonderzeichen und müssen deshalb verdoppelt werden.
Und dir fehlen haufenweise Anführungszeichen....
Und dir fehlen haufenweise Anführungszeichen....
Abschließend noch eine Frage zu der Rückübertragung von Powershell zur BAT-Datei. Wie kann ich da denn die berichtigte URL wieder aufnehmen.
Mit einer FOR-Schleife, insgesamt dann also bspw. so wenn du die Url als Parameter an die Batch übergibst.@echo off
set "url=%~1"
for /f "delims=" %%a in ('powershell -Executionpolicy Bypass -Command "[System.Net.WebUtility]::UrlDecode('%url%')"') DO set "result=%%a"
echo %result%
deineBatch.cmd "DEINEURL"
DANKE schon jetzt für die tatkräftige Hilfe.
Keine Ursache, machen wir doch gerne
Die WebUtility-Klasse ist erst ab .NET 4.0 enthalten und benötigt mindestens das Management Framework 3.0 , d.h. wenn du auf mindestens PS 3.0 auf deinem Windows 7 upgradest ist sie auch dort verfügbar.
Zitat von @Gruenspecht:
Übergebe ich von außen (beim Aufruf der DOS-BAT) den String an eine Variable in der DOS-BAT-Datei und übergebe ich diese dann als
an das Powershell-Script, ist die Welt OK und das Powershell-Script decodiert alles richtig.
Und so soll es auch sein !! Weil ein Parameter nicht vom Interpreter geparst wirdÜbergebe ich von außen (beim Aufruf der DOS-BAT) den String an eine Variable in der DOS-BAT-Datei und übergebe ich diese dann als
Powershell -Executionpolicy ByPass -File "C:\Progs\Powershell\MeinScript.PS1" %1
Ich vermute ein Problem mit der Codepage von der Batchdatei, aber wissen tu ich es nicht.
Nein nix problem mit Codepage, wie ich oben schon geschrieben habe sind Prozentzeichen, werden sie direkt in die Batch geschrieben Sonderzeichen für eine Variable und werden beim parsen durch Werte ersetzt, d.h. das du alle Prozentzeichen verdoppeln müsstest wenn du tatsächlich so einen String in die Batch direkt rein schreibst !!http://www.robvanderwoude.com/escapechars.php
Aber das machst du doch nicht wirklich ?? Das Dingens soll doch bestimmt immer wieder andere URLs dekodieren oder ? Den String dann plain in die Batch zu schreiben wäre dann ja kontraproduktiv.