Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Frage Entwicklung Batch & Shell

Mitglied: schnettl

schnettl (Level 1) - Jetzt verbinden

24.07.2006, aktualisiert 03.08.2006, 5185 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.

Mit freundlichen Grüßen

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 ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Batch Variable setzten mit Leerzeichen (3)

Frage von Marlon1 zum Thema Batch & Shell ...

Batch & Shell
gelöst Leerzeichen wird nicht in Variable geschrieben (1)

Frage von Saschaaaaa zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Batch & Shell
gelöst Selected Gridview Value in Variable schreiben (4)

Frage von reissaus73 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (23)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (19)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...