Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Variable wird mit Leerzeichen ausgegeben

Mitglied: schnettl

schnettl (Level 1) - Jetzt verbinden

24.07.2006, aktualisiert 03.08.2006, 5272 Aufrufe, 3 Kommentare

Hallo,

bin jetzt schon seit einigen Stunden unterwegs um mein Problem zu lösen. Bin bei der Google Suche irgendwie immer wieder bei Euch herausgekommen und hab hier auch schon sehr viel nachgelesen. Problem ist folgendes:

Ich möchte aus einer bestehenden Textdatei eine url herauslesen und diese per wget weiterverarbeiten. Nach dem Studium zahlreicher Artikel hier auf der Seite bin ich jetzt schonmal soweit gekommen:


extract.bat:

type ws1938.txt|find /i "http://vp.video.google.com;>info.txt"

daraufhin ergibt sich in der Datei Info.txt folgender Inhalt:

url:http://vp.video.google.com/videodownload?version=0&secureurl=
swAAAIPcOXUjtdRa_6NY_rQR8buNnckoMj8-fUxmJljUKWauUcgN49ghAJ
FwfgmI3VoD0rVmUeZQ2smT9Og-vHsxqw5zFM5bNDUSv5xXllLG9u5lGrM
8vKFXiXAOG7ABHmUWQyX_GlY1ccHNkhu-7YfIX69XWw-UifIiD1VVFDTJTLG
_ZgvCgIvdMAimGmWeZJvTDXrOSqciOFSqIZJWSGDJaa12t7nYgfhjJI0ovuu
1b4kI69nDsks8M-CCLx72L3WCmg&sigh=HEcJ2HfIVV00UwMuP5UihSBlxN
c&begin=0&len=535601&docid=3116340055027235185

Das ist schon fast das was ich haben möchte. Störend ist nur das url: vor dem Link. Also hab ich nach einer Lösung gesucht die mir das ganze entfernt und daraus ergab sich folgendes:

delurl.bat:

for /F %%t in (info.txt) do set a=%%t

%a:~4%

Normalerweise müsste mir nun abzüglich der ersten 4 Zeichen der komplette Link angezeigt werden. Heraus kommt aber dieses:

D:\Filme\gvp>set a=url:http://vp.video.google.com/videodownload?version=0&secure
url=swAAAIPcOXUjtdRa_6NY_rQR8buNnckoMj8-fUxmJljUKWauUcgN49ghAJFwfgmI3VoD0rVmUeZQ
2smT9Og-vHsxqw5zFM5bNDUSv5xXllLG9u5lGrM8vKFXiXAOG7ABHmUWQyX_GlY1ccHNkhu-7YfIX69X
Ww-UifIiD1VVFDTJTLG_ZgvCgIvdMAimGmWeZJvTDXrOSqciOFSqIZJWSGDJaa12t7nYgfhjJI0ovuu1
b4kI69nDsks8M-CCLx72L3WCmg&sigh=HEcJ2HfIVV00UwMuP5UihSBlxNc&begin=0&len=535601&d
ocid=3116340055027235185

D:\Filme\gvp>http://vp.video.google.com/videodownload?version=0" & secureurl=swA
AAIPcOXUjtdRa_6NY_rQR8buNnckoMj8-fUxmJljUKWauUcgN49ghAJFwfgmI3VoD0rVmUeZQ2smT9Og
-vHsxqw5zFM5bNDUSv5xXllLG9u5lGrM8vKFXiXAOG7ABHmUWQyX_GlY1ccHNkhu-7YfIX69XWw-UifI
iD1VVFDTJTLG_ZgvCgIvdMAimGmWeZJvTDXrOSqciOFSqIZJWSGDJaa12t7nYgfhjJI0ovuu1b4kI69n
Dsks8M-CCLx72L3WCmg & sigh=HEcJ2HfIVV00UwMuP5UihSBlxNc & begin=0 & len=535601
& docid=3116340055027235185
Der Befehl "http:" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "secureurl" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "sigh" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "begin" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "len" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "docid" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

Meines erachtens wird die Variable durch zB. das & Zeichen interpretiert und die entsprechenden nachfolgenden Zeichen werden als Befehle verwertet.Weiterhin werden auch an bestimmten Stellen Leerzeichen eingefügt. Mein erster Ansatz war, das ganze mit "delims=§" zu beeinflussen, bzw. mit der token Geschichte. Hat aber alles irgendwie nicht funktioniert.

Einen Teilerfolg brachte mir folgendes:

for /F %%t in (info.txt) do set a=%%t
"%a:~4%

Daraufhin wird die Variable mit vorangestellten " Zeichen in korrekter Form ausgegben, aber es erscheint die Fehlermeldung, dass die eingegebene Zeile zu lang ist. War auch eher nur ein Versuch.

Wäre sehr schön wenn mir jemand helfen könnte. Bin für alle Antworten dankbar.

P.S. Betreffende Dateien die heruterzuladen sind, sollen im Rahmen einer studentischen Arbeit analysiert werden. Sind Videodokumente betreffend der Berichterstattung der USA im 2.WK.
Mitglied: Biber
24.07.2006 um 23:03 Uhr
Moin schnettl,

willkommen im Forum.

na, da hast Du ja gleich beim ersten Batchproblem mal richtig in die Grütze gefasst...

Da sind mehr als zwei Stolpersteine drin, weil nicht nur das Ampersand-Zeichen "&", sondern auch das Gleichheitszeichen "=" im Batch bzw. für den CMD-Interpreter ein Steuerzeichen ist.

Ich kann Dir daher also keinen Einzeiler als Lösung anbieten, sonst wird es ein bisschen schwer lesbar.

01.
::-------snipp getLongurl.bat 
02.
@echo off & set "theUrl="  
03.
set "longurlfile=%temp%\longurl.txt" 
04.
type ws1938.txt|find /i "http://vp.video.google.com">%longurlfile% 
05.
For /f "tokens=1-4 delims=&" %%i in (%longurlfile%) do call :setTheUrl "%%i" "%%j" "%%k" "%%l" 
06.
Set TheUrl=%theUrl:~4% 
07.
set TheUrl=%theUrl:"&"=^&% 
08.
set theUrl 
09.
REM COMMENT PREVIOUS LINE FOR NODEBUG 
10.
goto :eof 
11.
 
12.
:SetTheUrl ...max vier Parameter vorgesehen... also drei Ampersands je Zeile... 
13.
:: UNCOMMENT FOR DEBUG echo [1[%~1] [2[%~2] [3[%~3] [4[%~4] 
14.
Set TheUrl=%theUrl%%~1 
15.
If NOT "%~2"=="" set TheUrl=%theUrl%"&"%~2 
16.
If NOT "%~3"=="" set TheUrl=%theUrl%"&"%~3 
17.
If NOT "%~4"=="" set TheUrl=%theUrl%"&"%~4 
18.
goto :eof 
19.
::-------snapp getLongurl.bat
..wenn es Dich interessiert, kann ich Dir den Lösungsansatz auch herleiten.
Probier es auch - es sollte funtionieren.

Ergebnis-Output bzw. Wert der Variablen %TheUrl% bei mir am CMD-Prompt:
01.
(=22:57:07  D:\temp=) 
02.
>f:\getlongUrl.bat 
03.
TheUrl=http://vp.video.google.com/videodownload?version=0&secureurl=swAAAIPcOXUjtdRa_6NY_rQR8buNncko 
04.
Mj8-fUxmJljUKWauUcgN49ghAJFwfgmI3VoD0rVmUeZQ2smT9Og-vHsxqw5zFM5bNDUSv5xXllLG9u5lGrM8vKFXiXAOG7ABHmUW 
05.
QyX_GlY1ccHNkhu-7YfIX69XWw-UifIiD1VVFDTJTLG_ZgvCgIvdMAimGmWeZJvTDXrOSqciOFSqIZJWSGDJaa12t7nYgfhjJI0o 
06.
vuu1b4kI69nDsks8M-CCLx72L3WCmg&sigh=HEcJ2HfIVV00UwMuP5UihSBlxNc&begin=0&len=535601&docid=31163400550 
07.
27235185
...as should do...

Gruß
Biber
Bitte warten ..
Mitglied: schnettl
26.07.2006 um 20:53 Uhr
Hallo,

hatte gestern Geburtstag, deswegen erst heute die Rückmeldung.
Danke erstmal für das herzliche Willkomen und ganz grosses Kompliment an dich Biber. Habe heute die ganze Sache mal in die Tat umgesetzt und es funktioniert wunderbar. Musste nur die Anzahl der Tokens bisschen hochnehmen und dann hat er die ganze URL genommen. Den nächsten Strich hat mir dann wget durch die Rechnung gemacht. Kommt wohl irgendwie auch nicht ganz mit der Schreibweise der URL klar und interpretiert aus der URL gleich den Remote Ordner zum Speichern der Dateien. Nunja nach einigem probieren hab ich mich dann für Firefox entschieden und dort wird die Datei anstandslos heruntergeladen. Am Ende sieht der ganze Spass so aus:

01.
::-------snipp getLongurl.bat 
02.
@echo off & set "theUrl="  
03.
set "longurlfile=d:\filme\gvp\longurl.txt" 
04.
type d:\filme\gvp\006.gvp|find /i "http://vp.video.google.com">%longurlfile% 
05.
For /f "tokens=1-7 delims=&" %%i in (%longurlfile%) do call :setTheUrl "%%i" "%%j" "%%k" "%%l" "%%m" "%%n" "%%o" 
06.
set TheUrl=%theUrl:~4% 
07.
set TheUrl=%theUrl:"&"=^&% 
08.
set theUrl 
09.
REM COMMENT PREVIOUS LINE FOR NODEBUG 
10.
 
11.
C:\Programme\WEB\Firefox\Firefox.exe "%theUrl%" 
12.
 
13.
goto :eof 
14.
 
15.
 
16.
 
17.
:SetTheUrl ...max vier Parameter vorgesehen... also drei Ampersands je Zeile... 
18.
:: UNCOMMENT FOR DEBUG echo [1[%~1] [2[%~2] [3[%~3] [4[%~4] [5[%~5] [6[%~6] [7[%~7] 
19.
Set TheUrl=%theUrl%%~1  
20.
If NOT "%~2"=="" set TheUrl=%theUrl%"&"%~2 
21.
If NOT "%~3"=="" set TheUrl=%theUrl%"&"%~3 
22.
If NOT "%~4"=="" set TheUrl=%theUrl%"&"%~4 
23.
If NOT "%~5"=="" set TheUrl=%theUrl%"&"%~5 
24.
If NOT "%~6"=="" set TheUrl=%theUrl%"&"%~6 
25.
If NOT "%~7"=="" set TheUrl=%theUrl%"&"%~7 
26.
goto :eof 
27.
 
28.
 
29.
::-------snapp getLongurl.bat
Einzige Verbesserung die ich noch vornehmen muss ist die Quelldatei für die URL variabel einzutragen, bzw. mit einer Schleife hochzuzählen. Wird heute wohl nichts mehr werden, warten noch ein paar andere Sachen. Werde das Endergebnis aber bekanntgeben.

Mein besonderer Dank und meine Hochachtung an dich Biber. Hab schon einige einfache Sachen mit Batch gemacht und hab bis jetzt alles soweit zufriedenstellen hinbekommen, aber hierbei wäre ich ohne dich hoffnungslos untergegangen. Werde dein Angebot der Herleitung gern wahrnehmen. Insbesondere die Schleifenverarbeitung, bzw. der Algorithmus interessiert mich, also ab Zeile 4.

MfG

schnettl *jetztabendbrotmachend*
Bitte warten ..
Mitglied: Biber
03.08.2006 um 20:18 Uhr
Na, schnettel,
dann mit ganz viel Verspätung Glückwunsch nachträglich und eine versuchte Herleitung.
Wobei ich nicht so gut im Erklären bin...

Ich geh mal von Deinem angepassten Schnippsel aus:
01.
::-------snipp getLongurl.bat 
02.
01 @echo off & set "theUrl="  
03.
02 set "longurlfile=d:\filme\gvp\longurl.txt" 
04.
03 type d:\filme\gvp\006.gvp|find /i "http://vp.video.google.com">%longurlfile% 
05.
04 For /f "tokens=1-7 delims=&" %%i in (%longurlfile%) do call :setTheUrl "%%i" "%%j" "%%k" "%%l" "%%m" "%%n" "%%o" 
06.
...
In der Textdatei %longurlfile% steht ja jetzt eine auf mehrere Zeilen umgebrochene URL wie oben abgebildet.
Würde ich einen "normalen" mehrzeiligen Text als "langen String" in eine Variable packen, wäre es einfacher. Ich könnte zeilenweise auslesen und jede neue Zeile ans Ende der bisherigen Variablen setzen. Beispiel:
..For /F %%i "delims=" in (c:\test\einpaarZeilen.txt) do call :setMyVar %%i
goto :eof
:SetMyVar
Set MyVar=%SetMyVar%%1
:: Lies: Setze Myvar auf %aktuellerInhaltvonMyVar% plus Parameter 1 (==die nächste Zeile)
goto :eof

Das kann ich mit den Zeilen in %longurlfile% aus 2 Gründen nicht machen.
Erstens ist in den Einzelzeilen ein Gleichheitszeichen, welches ich nur als Variableninhalt "transportieren" kann, wenn
- es maskiert wäre (siehe Forumssuche oder meine Batch-Tuts) oder
- wenn in Anführungszeichen eingeschlossen ist.
Zweitens sind auch Ampersands "&" enthalten, die ebenfalls als Steuerzeichen interpretiert werden, sobald sie der CMD.exe vor die Füße fallen.
Zwei Steuerzeichen gleichzeitig kann ich nicht im Auge behalten, also versuche ich eines davon zu eliminieren (vergl J. Caesar; "Divide et impera" oder Aka Wakanabe; "Zen und die Kunst ein Soduku zu lösen").
Ich zerlege also jede Zeile in Einzel-Tokens (=Bestandteile) und gebe als Trennzeichen zwischen Token ein Ampersand an.
Das ist die Klausel "tokens=1-7 delims=&" in der FOR..IN..DO-Anweisung.
Das ich 1-4 Tokens erwarte und Du bis zu 7 Tokens, lässt auf unterschiedliche Grade von Optimismus/Pessimismus bzw Fatalismus/Realismus schließen... aber das würde zu weit führen..

Wo war ich...ach ja...sieben Tokens werden erwartet, die rechts des <b<DO..</b>..herausfallen.
Daher bei einer Init-Zählvariablen %%i links entsprechend %%i %%j........%%o rechts
Diese 7 Variablen kommen weiter untern in dem geCALLeten Block dort als Variablen %1 %2...%7 an.
Also...erst lesen, was in Zeile 14 bis 23 passiert, dann geht es im Ablauf mit Zeile 5 weiter.

In Zeile 14 steht nur der LABEL-Name ":SetTheUrl"
Den leeren Raum dahinter für Kommentare zu nutzen, ist eher eine persönliche Note.
14 :SetTheUrl ...max vier Parameter vorgesehen... also drei Ampersands je Zeile...
Müsste jetzt auch
14 :SetTheUrl ...max sieben Parameter vorgesehen... also sechs Ampersands je Zeile...
..heißen.
Wenn Du testen wolltest, dann mach aus Zeile 15...
15 :: UNCOMMENT FOR DEBUG echo [1[%~1] [2[%~2] [3[%~3] [4[%~4] [5[%~5] [6[%~6] [7[%~7]
...diese hier:
15 echo [1[%~1] [2[%~2] [3[%~3] [4[%~4] [5[%~5] [6[%~6] [7[%~7]
....dann wird jeweils am Bildschirm angezeigt, was in dem ":SetTheUrl"-Block als Parameter 1-7 ankommt.

In Zeile 16 wird der Variablen SetTheUrl der Wert "aktuellerInhaltVonSetTheUrl" plus Parameter 1 zugewiesen
16 Set TheUrl=%theUrl%%~1

In Zeile 17ff wird der Variablen SetTheUrl der Wert "aktuellerInhaltVonSetTheUrl" plus Parameter 2 (3, 4,..n) zugewiesen,
wenn es denn einen n-ten Parameter gibt
17 If NOT "%~2"=="" set TheUrl=%theUrl%"&"%~2

In zeile 23 erfolgt wieder der Rücksprung zur aufrufenden FOR..IN..DO..Anweisung.
23 goto :eof
...also zurück in Zeile 4.
In Zeile 05 werden die ersten 4 zeichen entsorgt (da steht immer ein "url:" drin.)
Zeile 06 ersetzt alle Zeichen "&" durch ein einzelnes Ampersand &.
Da mein CMD-Interpreter mich versteht, muss ich das Ampersand allerdings maskieren mit einem Caret "^".

01.
... 
02.
05 set TheUrl=%theUrl:~4% 
03.
06 set TheUrl=%theUrl:"&"=^&% 
04.
07 set theUrl 
05.
08 REM COMMENT PREVIOUS LINE FOR NODEBUG 
06.
09 
07.
10 C:\Programme\WEB\Firefox\Firefox.exe "%theUrl%" 
08.
11 
09.
12 goto :eof 
10.
13 
11.
14 :SetTheUrl ...max vier Parameter vorgesehen... also drei Ampersands je Zeile... 
12.
15 :: UNCOMMENT FOR DEBUG echo [1[%~1] [2[%~2] [3[%~3] [4[%~4] [5[%~5] [6[%~6] [7[%~7] 
13.
16 Set TheUrl=%theUrl%%~1  
14.
17 If NOT "%~2"=="" set TheUrl=%theUrl%"&"%~2 
15.
18 If NOT "%~3"=="" set TheUrl=%theUrl%"&"%~3 
16.
19 If NOT "%~4"=="" set TheUrl=%theUrl%"&"%~4 
17.
20 If NOT "%~5"=="" set TheUrl=%theUrl%"&"%~5 
18.
21 If NOT "%~6"=="" set TheUrl=%theUrl%"&"%~6 
19.
22 If NOT "%~7"=="" set TheUrl=%theUrl%"&"%~7 
20.
23 goto :eof 
21.
24  
22.
25 ::-------snapp getLongurl.bat
Hoffe, es war halbwegs klärend.
Um sicherzugehen, werde ich einfach den Beitrag auf "Gelöst" setzen und vertröste eventuelle Fragesteller auf spätere Tutorials.

Gruß
Biber
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Leerzeichen wird nicht in Variable geschrieben

gelöst Frage von SaschaaaaaBatch & Shell1 Kommentar

Hallo Leute, Ich habe diese Zeile: Und als Ausgabe dann: "C:\Users\Ich\extrac" anstatt den vollen Pfad aller Dateien in diesem ...

Batch & Shell

Batch Variable setzten mit Leerzeichen

gelöst Frage von Marlon1Batch & Shell3 Kommentare

Hallo :) Ich würde gerne das man mit "set /p code= " 2 Wörter in die Variable "code" setzen ...

Batch & Shell

Leerzeichen aus einer Variable entfernen

gelöst Frage von CoaxBatch & Shell8 Kommentare

Moinsen, ich versuche gerade ein Leerzeichen aus einer Variable zu entfernen und es gelingt mir einfach nicht, ich kann ...

Batch & Shell

Batch Variable erzeugen mit Leerzeichen und Klammern

gelöst Frage von hipfzwirgelBatch & Shell11 Kommentare

Hallo an Alle, ich habe eine lösbare Aufgabe und finde die richtige Schreibweise nicht. Ich muss eine Variable in ...

Neue Wissensbeiträge
E-Mail
Email-Apps und Verhalten bei Pop3
Erfahrungsbericht von kfranzk vor 16 StundenE-Mail3 Kommentare

Hallo Freunde, da mir mein diesbezüglicher Faden als gelöst markiert wurde, muss ich hier neu aufsetzen. Ich arbeite bewusst ...

Hyper-V

Optimiertes Ubuntu per Microsoft Hyper-V-Schnellerstellung verfügbar

Anleitung von Frank vor 17 StundenHyper-V

Für Microsofts Virtualisierungssoftware Hyper-V ist ab sofort auch ein optimiertes Ubuntu 18.04.1 LTS verfügbar. In der "Hyper-V-Schnellerstellung" App, die ...

Sicherheits-Tools

Trend Micro WorryFree Business Security (WFBS) 10 - neuer Patch 1470 verfügbar

Tipp von VGem-e vor 21 StundenSicherheits-Tools1 Kommentar

Servus, mal sehen, ob mit Patch 1470, zu finden unter dann die angeblich fehlerhafte Funktion, die unter W10 im ...

Server-Hardware

Lösung für Ersatz eines defekter Raid-Controllers

Anleitung von wellknown vor 1 TagServer-Hardware3 Kommentare

Hallo, da ich nichts gefunden habe und selbst eine Lösung brauchte, hier eine kleine Anleitung für alle die vor ...

Heiß diskutierte Inhalte
Windows Server
Mit der alten Domäneprofil anmelden ohne Server
gelöst Frage von SyosseWindows Server37 Kommentare

Hallo Jungs Folgendes Szenario: Ich habe bei einem sehr kleinen Unternehmen (2Personen) den Server migriert, soweit hat alles geklappt. ...

Sicherheits-Tools
Virenprogramm lässt Programme nicht starten
Frage von SurferGirlSicherheits-Tools23 Kommentare

Hallo, ich bin neu hier, ich hoffe ich habe die richtige Rubrik gewählt. Falls nicht, tut es mir leid. ...

Windows Server
Kann DNS-Einträge nicht finden
gelöst Frage von BPeterWindows Server19 Kommentare

Hallo, wenn ich folgenden Befehl absetze, bekomme ich eine Liste zurück mit allen Einträgen der DNS-Zone. Wenn ich aber ...

Windows Server
SQL Server Instanz (Eplan) auf WIN 2008 RC2 Server frisst RAM ohne Limit
Frage von derinderinderinWindows Server17 Kommentare

Hallo Zusammen, Wir haben hier einen Windows 2008 RC2 Server. Darauf läuft ein SQL Server Express 2014 Version 12.0.4232.0. ...