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 Aus Fragmenten einer Textdatei eine neue Textdatei erzeugen bzw. das original bearbeiten

Mitglied: TEKnopapST

TEKnopapST (Level 1) - Jetzt verbinden

16.01.2011, aktualisiert 22:25 Uhr, 3638 Aufrufe, 6 Kommentare

Hallo Forumsmitglieder, ich hoffe Ihr seid alle gut ins Neue Jahr gekommen und seid ausgeruht und motiviert mir weiter zu helfen ;)

Ausgangssituation ist eine Liste von *.nfo Dateien die alle eine Zeile mit folgedem String enthalten

<ID>ttXXXXXXX</ID> (X steht für eine beliebige Zahl)

Ziel ist jeweils die entsprechende .nfo Datei so zu verändern das nur noch folgender String darin steht:

http://www.imdb.com/title/ttXXXXXXX

Falls das nicht möglich ist wäre auch eine neue Datei etwa nach dem Schema *.nfo_new denkbar.

Ich habe mit Hilfe der Beiträge in diesem Forum mal begonnen, komme aber nicht so recht ans Ziel. Ich hoffe Ihr Jungs/Mädels hier könnt mir weiterhelfen ?
Es wäre cool wenn Ihr die Lösung nicht in einer einzigen Zeile präsentieren würdet, damit mir das Nachvollziehen leichter fällt ;)

Anbei mein jetziger Code:
01.
@ECHO OFF 
02.
  
03.
set "ListName=list.txt" 
04.
set "ResultList=result.txt" 
05.
IF EXIST %ListName% DEL %ListName% 
06.
IF EXIST %ResultList% DEL %ResultList% 
07.
 
08.
REM Liste der Dateinamen erzeugen 
09.
CMD /C dir *.nfo /B /s /a-D >>.\%ListName% 
10.
 
11.
REM In jeder Datei der Liste READ_NFO aufrufen 
12.
FOR /f  %%f IN (%ListName%) DO call :READ_NFO "%%f" 
13.
GOTO eof 
14.
 
15.
 
16.
REM nach dem String tt..... in der übergebenen Datei suchen 
17.
:READ_NFO 
18.
set "Dateiname=%~1" 
19.
set "URL_BASE=http://www.imdb.com/title/" 
20.
findstr /I "<id>........." %Dateiname%>>%ResultList% 
21.
if %errorlevel%==0 ( 
22.
echo . 
23.
) else ( 
24.
echo No Match in %Dateiname% 
25.
26.
 
27.
GOTO eof 
28.
:eof
Danke & Gruß
T3Knopap$T
Mitglied: rubberman
17.01.2011 um 00:29 Uhr
Hallo T3Knopap$T und willkommen im Forum.

Zitat von TEKnopapST:
Es wäre cool wenn Ihr die Lösung nicht in einer einzigen Zeile präsentieren würdet, damit mir das
Nachvollziehen leichter fällt ;)

Hmm, meiner Meinung nach ist das aber in einer Zeile abgehandelt.
01.
for /f "tokens=1* delims=:" %%a in ('findstr /i "<id>........." *.nfo') do for /f "tokens=2 delims=<>" %%c in ("%%b") do >"%%~a_new" echo http://www.imdb.com/title/%%c
Wenn das so funktioniert, kannst du statt >"%%~a_new" auch >"%%~a" verwenden, um die ursprüngliche Datei zu überschreiben.

Zur Erklärung:
Wenn du dir mal ansiehst, was ein findstr /i "<id>........." *.nfo ausgibt, wirst du feststellen, dass das Format wie folgt ist:
Dateiname:Zeileninhalt
In der ersten FOR Schleife wird der Doppelpunkt als Delimiter benutzt. Somit ist der Dateiname in %%a und die Zeile in %%b.
In der zweiten FOR Schleife wird %%b an den Zeichen < und > zerhackstückelt. Interessant ist dann nur das zweite Token (Zeichenfolge zwischen <id> und </id>), das sich in %%c wiederfindet.

Grüße
rubberman
Bitte warten ..
Mitglied: TEKnopapST
17.01.2011 um 07:39 Uhr
Guten Morgen Rubbermann,


erst einmal vielen Dank für die schnelle Hilfe ! ;) Deine Lösung funktioniert soweit ganz gut. Musste "tokens" in der 2 FOR-Schleife auf 3 setzen sonst kam immer ID als Ergebnis heraus. Jetzt würde ich das Skript gerne etwas erweitern, denn ohne die Dateiliste funktioniert das Skript nur, wenn alle *.nfo Dateien in einem Ordner liegen.

Daher habe ich folgendes versucht, leider ohne Erfolg:

01.
CMD /C dir %defaultPath%*.nfo /B /s /a-D >>.\%ListName% 
02.
 
03.
REM In jeder Datei der Liste READ_NFO aufrufen 
04.
rem FOR /f  %%f IN (%ListName%) DO call :READ_NFO "%%f" 
05.
for /f "tokens=1* delims=:" %%a in ('findstr /i "<id>........." %ListName%') do for /f "tokens=3 delims=<>" %%c in ("%%b") do echo "%%~a_new and %%c" 
06.
GOTO eof 
07.
 
Das Problem ist glaube ich, dass in %%a nur der Dateinahme ohne Pfadangabe steht und das Skript daher nicht weiß wo es die Datei anlegen soll, kann das sein ?

Weiterhin wäre es schön wenn das ganze nur gemacht wird wenn auch wirklich <ID> in der *.nfo gefunden wurde, da bei einem zweiten Durchlauf ja schon einige der Dateien umgestellt worden sind und ich dann nur noch die neu hinzugekommenen ändern muss ;)

Ich hoffe ich hab mich im Halbschlaf, in dem ich mich aktuell noch befinde, halbwegs verständlich ausgedrückt ? ;)

Danke & Gruß
T3Knopap$T
Bitte warten ..
Mitglied: rubberman
17.01.2011 um 18:31 Uhr
Hallo T3Knopap$T

Zitat von TEKnopapST:
Musste "tokens" in der 2 FOR-Schleife auf 3 setzen sonst kam immer ID als Ergebnis heraus.
Deinem ersten Posting zufolge kamen keine (Leer-)Zeichen vor <id>. Muss einem schon gesagt werden

Zitat von TEKnopapST:
Weiterhin wäre es schön wenn das ganze nur gemacht wird wenn auch wirklich <ID> in der *.nfo gefunden wurde, da
bei einem zweiten Durchlauf ja schon einige der Dateien umgestellt worden sind und ich dann nur noch die neu hinzugekommenen
ändern muss ;)
Naja, du prüfst ja bereits mit FINDSTR, ob <id> vorkommt. Andererseits schreibst du ja im Moment *.nfo_new - Dateien. Somit kannst du vorher prüfen, ob zu einer *.nfo - Datei das entsprechende Gegstück schon vorhanden ist.
Kaskadieren wir den vermeintlichen Einzeiler mal, um es etwas übersichtlicher zu machen:

~~~snippp~~~
01.
for /f "delims=" %%a in ('dir /a-d /b /s *.nfo') do ( 
02.
  if not exist "%%~a_new" ( 
03.
    for /f "tokens=3 delims=<>" %%b in ('findstr /i "<id>........." "%%~a"') do ( 
04.
      >"%%~a_new" echo http://www.imdb.com/title/%%b 
05.
06.
07.
)
~~~snippp~~~

Grüße
rubberman
Bitte warten ..
Mitglied: TEKnopapST
17.01.2011 um 22:02 Uhr
Hallo Rubberman,

optimalstens ! Vielen Dank.
Das mit den Tokens u. dem Delims hab ich noch nicht ganz geblickt ... das werde ich mir wohl noch mal in Ruhe ansehen müssen.
Kannst du vielleicht noch kurz erklären wozu das "~" Zeichen gut ist (in Zeile 2-4 "%%~a" ) ?

Besten Dank noch mal ... bin echt begeistert von der Reaktionsgeschwindigkeit in diesem Froum!


Gruß
T3Knopap$T
Bitte warten ..
Mitglied: rubberman
17.01.2011 um 23:29 Uhr
Hallo T3Knopap$T,

Das mit delims und tokens ist relativ einfach.
Angenommen du definierst "tokens=2,3 delims=#$"
und lässt das über einen String laufen, der so aussieht:
#qwe#asd$#yxc$$$$$rtz

  • delims=#$ - Der String wird an # oder $ getrennt, wobei Trennzeichen die ganz am Anfang des Strings stehen einfach nur eliminiert werden, was den Stellenwert des nachfolgenden Teilstrings aber nicht beeinflusst (es ist immernoch das erste Teilstück). Mehrfache Trennzeichen werden wie ein einziges behandelt.

  • tokens=2,3 - Das zweite Teilstück des Strings (asd) wandert in die angegebene Laufvariable, das dritte Teilstück (yxc) in die nächst höhere Laufvariable. Das ist schon grundsätzlich alles.

Die Tilde (~) dient für mich zur inneren Beruhigung
Sie entfernt (auch wenn es nicht nötig ist) umschließende Anführungszeichen im Wert der Laufvariablen. Wie du siehst setze ich das ganze anschließend wieder in Anführungszeichen um nicht in einen Fehler zu laufen, falls du zB. Leerzeichen im Pfad oder Dateinamen hast. Die Tilde stellt also letztlich nur sicher, dass das ganze nicht zweifach in Anführungszeichen steht.

Grüße
rubberman
Bitte warten ..
Mitglied: TEKnopapST
20.01.2011 um 22:40 Uhr
Moin Rubberman,


sorry das ich erst jetzt antworte .... bin geschäftlich unterwegens.
Klappt bestens ... vielen Dank noch Mal für die ausführliche, nette und schnelle Hilfe !!

Gruß
T3Knopap$T
Bitte warten ..
Ähnliche Inhalte
Entwicklung

Textdatei zyklisch und automatisiert bearbeiten und versenden

Frage von HoschiDEntwicklung5 Kommentare

Hallo Administratoren! :-) Ich stehe vor einem (für mich) noch großen Problem, bin aber guter Dinge, dass mir hier ...

Batch & Shell

Bash Script soll neue Datei erzeugen

Frage von SpeakerSTBatch & Shell2 Kommentare

Hallo zusammen, ich benötige mal euren Rat. Ich möchte in einem Script Parameter eingeben die darauf hin einen Text ...

Batch & Shell

BATCH: Daten aus Textdatei auslesen und in neue Textdatei separieren

gelöst Frage von Manuel1234Batch & Shell9 Kommentare

Hallo zusammen! Ich bin neu hier und freue mich auf die Gesellschaft. In meiner Frage geht es um eine ...

Administrator.de Feedback

Entwicklertagebuch: Neue Werkzeuge zum Bearbeiten von Kommentaren

Information von admtechAdministrator.de Feedback4 Kommentare

Hallo Administrator User, mit dem neuesten Release 5.1 haben wir das Hinzufügen und Bearbeiten von Kommentaren vereinfacht und verbessert. ...

Neue Wissensbeiträge
Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 1 TagWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Sicherheit
Microsoft und Skype: Sicherheit
Information von kgborn vor 1 TagSicherheit

Die Tage gab es ja einige Berichte zur Sicherheit des Skype-Updaters. Der Updater von Skype läuft unter dem Konto ...

Datenschutz

Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10

Information von Penny.Cilin vor 2 TagenDatenschutz8 Kommentare

Hallo, passend zum Thema Ablösung LIMUX in München ein Beitrag bei Heise (siehe Link folgend). Behörden ignorieren Sicherheitsbedenken gegenüber ...

Sicherheit
Information Security Hub Munich airport
Information von brammer vor 2 TagenSicherheit

Hallo, Neues Center für Cyber Kriminalität am Münchener Flughafen brammer

Heiß diskutierte Inhalte
DSL, VDSL
Mindestgeschwindigkeiten DSL Telekom
Frage von justlukasDSL, VDSL13 Kommentare

Hallo zusammen, Seit diesem Jahr habe ich Verständnisprobleme mit dem Verhalten der Telekom. Wir haben seit einem Jahr VDSL ...

Switche und Hubs
LANCOM-Switch: Probleme (no link) mit SFP-Modulen?
Frage von THETOBSwitche und Hubs9 Kommentare

Hi zusammen, ich habe folgendes Problem: Und zwar habe ich an einem Standort drei Switche verbaut - LANCOM GS-2326P+, ...

Debian
Wie finde ich den betroffenen user
Frage von ProtectedDebian8 Kommentare

Hallo, Wie kann ich den User finden der dies verursacht hat? Betriebsystem ist Debian 7 your Server/Customer with the ...

Voice over IP
Vodafone IP Anlagenanschluss - TK-Anlage einrichten
Frage von BytedreherVoice over IP8 Kommentare

Moin Zusammen, wir hatten gestern bei uns die Umstellung auf den neuen IP Anschluss bei Vodafone. Vodafone IP Anlagenanschluss ...