socca07
Goto Top

Variable mit Dateiinhalt vergleichen

Hallo zusammen,

ich bin neu in meinem Unternehmen und muss ein Problem lösen. Ich habe bereits im Forum gesucht, aber leider nichts passendes gefunden.
Ich muss in unterschiedlichen Verzeichnissen nach vorhandenen .txt Dateien suchen und wenn vorhanden, den ganzen Ordner wegkopieren.
Der Zielordner ist nicht immer gleich dem Quellordner. Nun kommt folgende Aufgabe hinzu. Wenn eine .txt Datei vorhanden ist, soll ich
in einer von Hand angelegten Datei nachschauen, ob es für den Ordner einen anderen Zielordner gibt als den vorhandenen Namen.
Wie kann ich nun überprüfen ob der Inhalt meiner Variablen (dateiornder) in der Datei vorkommt und wenn ja, dann den Wert nach dem Leerzeichen
auslesen, und als Verzeichnis anlegen?

Diese vorgehensweise ist erforderlich, weil es sich hierbei um eine Anwendung handelt, bei der man den Zielordner nicht ändern darf.

Kann mir jemand helfen? Ich wäre euch echt dankbar.


Gruß Socca07

Content-Key: 117273

Url: https://administrator.de/contentid/117273

Printed on: April 26, 2024 at 09:04 o'clock

Mitglied: 77559
77559 Jun 02, 2009 at 10:24:06 (UTC)
Goto Top
Zitat von @Socca07:
Hallo zusammen,
Moin moin,
Ich muss in unterschiedlichen Verzeichnissen nach vorhandenen .txt Dateien suchen und wenn vorhanden, den ganzen Ordner wegkopieren.
Der Zielordner ist nicht immer gleich dem Quellordner.
Ähh, den Satz solltest du vielleicht nochmal erklären.

Nun kommt folgende Aufgabe hinzu. Wenn eine .txt Datei vorhanden ist, soll ich in einer von Hand angelegten Datei nachschauen, ob es für den Ordner einen anderen Zielordner gibt als den vorhandenen Namen.

Wie kann ich nun überprüfen ob der Inhalt meiner Variablen (dateiornder) in der Datei vorkommt und wenn ja, dann den Wert nach dem Leerzeichen
auslesen, und als Verzeichnis anlegen?
Wenn du sicher bist, das in den Pfaden selbst kein Leerzeichen vorkommen kann, kein Problem.

So eine Lookupliste lässt sich leicht mit for und find realisieren. ( und es gibt mit Sicherheit auch Beispiele dafür)

Diese vorgehensweise ist erforderlich, weil es sich hierbei um eine Anwendung handelt, bei der man den Zielordner nicht ändern darf.

set DateiOrdner=C:\Test
for /F "Tokens=1,*" %%A in ('Find /i "%DateiOrdner% "  HandListe.txt ') Do Set "DateiOrdner=%%B"  

Wenn der gesuchte DateiOrdner aber als neuer Zielpfad einer anderen Paarung in der Liste stehen kann, ist etwas mehr Aufwand notwendig.

Gruß
LotPings

Edit Den Listentrenner Leerzeichen an den Suchbegriff angehängt damit nur der "linke" Teil gesucht wird.
Member: Socca07
Socca07 Jun 02, 2009 at 10:31:22 (UTC)
Goto Top
Danke für deine schnelle Antwort, ich werd es gleich mal probieren.
In den Verzeichnissen ist kein Leerzeichen, das ist sicher. Die Paarungen sind immer die selben und werden nicht verändert, im schlimmsten Falle evtl. erweitert.
Für den Fall, dass eine solche Paarung nicht vorhanden ist, wird eben der Quellordner als Zielordner angelegt.
Ich werde mich gleich nochmal melden.
Member: Socca07
Socca07 Jun 02, 2009 at 10:39:43 (UTC)
Goto Top
Irgendwie klappt es nicht. Ich versuche dir zu zeigen, was ich meine.
Dateiname test.txt

quellordner zielordner

Zuerst durchsuche ich eine unbestimmte Anzahl an Ordnern nach einer .txt. Sobald eine solche Datei in einem Unterverzeichnis vorhanden ist, muss ich den Verzeichnisnamen (in dem die .txt liegt)
mit dem Inhalt der test.txt vergleichen. Wenn als Quellordner dieser Name erscheint, wird der Inhalt in den Zielordner aus der .txt geschrieben. Wenn nicht, wird der Quellordner als Zielordner angelegt.
Die Namen der Quell- und Zielordner sind immer mit einem Space getrennt. Ich hoffe ich konnte es ein bisschen verständlich machen.

Gruß Socca07
Mitglied: 77559
77559 Jun 02, 2009 at 10:48:56 (UTC)
Goto Top
Zitat von @Socca07:
Irgendwie klappt es nicht. Ich versuche dir zu zeigen, was ich meine.
Dateiname test.txt
quellordner zielordner

In meinem Beispiel (das sehr wohl nach deinen zuerst gemachten Angaben funktioniert) ist dies die Datei Handliste.txt

Zuerst durchsuche ich eine unbestimmte Anzahl an Ordnern nach einer .txt. Sobald eine solche Datei in einem Unterverzeichnis vorhanden ist, muss ich den Verzeichnisnamen (in dem die .txt liegt) mit dem Inhalt der test.txt vergleichen. Wenn als Quellordner dieser Name erscheint, wird der Inhalt in den Zielordner aus der .txt geschrieben. Wenn nicht, wird der Quellordner als Zielordner angelegt.
Ja, das ist mir auch alles klar, aber wie du diesen Luft-Code tatsächlich ausführst hast du nicht gepostet - daher kann ich dazu auch keine Stellung nehmen.

Die Namen der Quell- und Zielordner sind immer mit einem Space getrennt. Ich hoffe ich konnte es ein bisschen verständlich machen.
Nicht wirklich. Poste deinen bisherigen Code.

Gruß
LotPings
Member: Socca07
Socca07 Dec 08, 2009 at 18:10:42 (UTC)
Goto Top
Hi zusammen,

zuerstmal möchte ich mich entschuldigen, dass ich so lange nichts hab hören lassen, aber wie Chefs eben so sind, war es bis jetzt doch nicht mehr so wichtig.
Jetzt aber bekomm ich wieder Druck von oben. Diesmal versuche ich genau zu erkären was ich tun muss. Mein bisheriger Code sieht vollgendermaßen aus.
@ echo off
set pfad=d:\daten
set anwendung=
set stapel=

cd %path%
dir /a:d /b >struktur.txt
set /a x1=1
for /f "tokens=1 delims=~" %%i in (%pfad%\struktur.txt) do call :ablauf %%i  
goto eof

:ablauf
echo on
set /a x1=%x1%
cd "%pfad%\%1"  
echo %1
Erreichen muss ich folgendes.

im Verzeichnis d:\daten gibt es eine unbestimmte Anzahl an Verzeichnissen. In jedem dieser Verzeichnisse gibt es wieder eine unbestimmte Anzahl von Verzeichnissen und in manchen dieser
Verzeichnisse liegt dann eine Datei mit der Endung txt, wenn eine solche Datei vorhanden ist, soll der gesamte Ordener in dem die Datei liegt wegkopiert werden.

Ich hab noch keinen Weg gefunden dies zu realisieren und weiß auch nicht genau, ob es überhaupt möglich ist.
Wäre nett wenn mir jemand helfen kann. Bis dahin Gruß Socca07

[Edit Biber] Codetags spendiert [/Edit]
Member: Biber
Biber Dec 08, 2009 at 20:33:39 (UTC)
Goto Top
Moin Socca07,

ich habe mich jetzt, nachdem ich den gesamten Threadverlauf nochmal nachvollzogen habe, nach reiflicher Überlegung dazu durchgerungen dir zu antworten.

An LotPings' Stelle würde ich wohl nicht antworten - der ist wahrscheinlich zu dem Schluss gekommen, dass er fruchtbarere Dialoge mit einem Harzer Käse oder einem Milchaufschäumer führen kann als mit manchen Fragestellern.

Wozu fragst du denn hier im Forum etwas, wenn dir das Thema vollkommen Wurscht ist und du in 5 Monaten keine 5 Minuten lang schaffst, dich mit dem Problem auseinanderzusetzen?

Deinen so genannten "Was ich bis jetzt habe"-Schnipsel solltest du deinen Cheffes lieber nicht zeigen. Gib es den Hasen oder steck es dahin wo du auch LotPings Ratschläge gelagert hast.


Mach diesen Quatsch hier...
im Verzeichnis d:\daten gibt es eine unbestimmte Anzahl an Verzeichnissen.
In jedem dieser Verzeichnisse gibt es wieder eine unbestimmte Anzahl von Verzeichnissen
und in manchen dieser Verzeichnisse liegt dann eine Datei mit der Endung txt,
wenn eine solche Datei vorhanden ist,soll der gesamte Ordener in dem die Datei liegt wegkopiert werden.

..vom CMD-Prompt aus mit dieser Zeile:
for /r "D:\Daten" /d  %i in (*) do if exist "%i\*.txt" copy "%i\*.*" WEG
...wobei du "WEG" ggf. noch spezifizieren solltest, falls deine Cheffes dir mitteilen, WTF denn "soll der gesamte Ordener in dem die Datei liegt wegkopiert werden." bedeuten soll.

Mach einen Haken dran, wenn fertig.

Grüße
Biber
Member: Socca07
Socca07 Dec 09, 2009 at 08:40:43 (UTC)
Goto Top
Tach Biber,

zunächst danke für deine Antwort. Ich möchte mich dafür entschuldigen, dass ich diesen Thread so lange unbeantwortet hab stehen lassen.
Es war keine böse Absicht von mir, aber ich werds mir merken und sowohl diesen als auch alle künftigen Threads in jedem Fall abschließen.

Leider bin ich kein Programmierer und daher auch dieser Schnippsel, aber ich habe ihn weggeschmissen und es mit deiner Zeile versucht, aber er macht nichts.
Für weg habe ich d:\test angegeben - mit und ohne " ". Er durchläuft zwar die Verzeichnisse aber das wars dann. Hab ich was falschgemacht?
Wäre nett, wenn du mir noch nen Tipp geben würdest.

Nochmals danke und nen schönen Tag.

Gruß Socca
Member: Socca07
Socca07 Dec 09, 2009 at 08:55:06 (UTC)
Goto Top
Hi Biber,

hatte doch einen Erfolg mit deiner Zeile - hab grad gemerkt, dass nur in D:\Daten Dateien mit der Endung txt waren, die hat er nicht kopiert.
Jetzt hab ich eine txt in das Verzeichnis d:\daten\formulare kopiert und siehe da er hat den Inhalt des Ordners formulare nach d:\test kopiert.

Jetzt meine Frage - Ist es möglich den kompletten Ordner formulare samt Inhalt nach d:\test zu kopieren?

Nun bin ich endlich mal nen Schritt weiter, dafür erstmal danke. Dann kann ich den Herren vielleicht doch noch ne Lösung präsentieren.

Gruß Socca
Member: Socca07
Socca07 Dec 09, 2009 at 10:44:31 (UTC)
Goto Top
Nochmals Tach,

ich habe dieses Problem gelöst, in dem ich am Ende den Parameter "%%~nxi" in den Pfad eingebunden habe, funktioniert super.
Dank der "" funktionieren sogar lange Dateinamen. Nun würde mich interessieren ob es möglich ist, nach dem kopieren den jeweils kopierten
Ordner gleich zu löschen. Kannst du mir nen Tipp geben??

Gruß Socca
Member: Socca07
Socca07 Dec 15, 2009 at 12:52:07 (UTC)
Goto Top
Hallo zusammen,

zuerst möchte ich mich nochmals bedaqnken, dass ihr mir geholfen habt. Nach langen Recherchen und vielen Test
hab ich meine Probleme gelöst. Sollte sich jemand für die Lösung interessieren, poste ich diese gerne.
Ansonsten wünsche ich allen ein frohes Fest und einen guten Rutsch ins neue Jahr.

Gruß Socca