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, 5327 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 ..
Neue Wissensbeiträge
Windows 10
Die tickende DSGVO-Zeitbombe von Microsoft
Information von Frank vor 2 StundenWindows 101 Kommentar

Hier ein guter Beitrag von Golem.de zum Thema DSGVO und das Windows 10 aktuell nicht DSGVO konform ist! Das ...

Microsoft Office

Gebrandete OEM-Version von Office 2003 auf Nachfolgerechner installieren

Tipp von Lochkartenstanzer vor 4 StundenMicrosoft Office

Hallo Kollegen, gerade mal wieder ein Kundensystem mit Widows 10 in den Fingern gehabt, bei dem der Besitzer sein ...

Windows Server

Ein Feature, welches einem das Arbeiten mit Windows-2019-Coreservern erleichtern kann

Information von DerWoWusste vor 5 StundenWindows Server2 Kommentare

Man kann mittels Kommando nun folgendes auf Server 2019 in der Coreversion v1809 freischalten, so dass man es lokal ...

Windows 10
MS möchte offenbar lokale Konten abschaffen
Information von UweGri vor 20 StundenWindows 1010 Kommentare

Guten Tag Admins, ab und an lese ich bei Dr.-Windows Bei dieser Meldung dachte ich, wird MS jetzt offen ...

Heiß diskutierte Inhalte
Erkennung und -Abwehr
MS-Hotline-Telefonterror
Frage von HenereErkennung und -Abwehr19 Kommentare

Servus zusammen, seit ca 3 Wochen haben wir immer wieder Anrufe von unbekannten Nummern, teils aus dem Ausland. Nach ...

Batch & Shell
Active Directory Picker - Get-ADGroup kann nicht in den Typ konvertiert werden
Frage von dispatcherBatch & Shell17 Kommentare

Mahlzeit zusammen, Im folgenden Skript erhalte ich immer die Meldung: Get-ADGroup : "System.Object " kann nicht in den Typ "Microsoft.ActiveDirectory.Management.ADGroup" ...

Batch & Shell
Last Logon Datum per Powershell abrufen
gelöst Frage von DerWoWussteBatch & Shell12 Kommentare

Moin Kollegen. Wer ist vor 10 schon so fit, mir Folgendes zu erklären: Das zum Titel passende Skript ist ...

Windows 10
Windows 10 mit kaputtem .Net 4.8
Frage von krischeuWindows 1012 Kommentare

Hi, ich habe mit dem Programm ADDISON ein Stabilitätsproblem. Es stürzt regelmäßig während des Arbeitens ab. In der Ereignisanzeige ...