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 mit Dateiinhalt vergleichen

Frage Entwicklung Batch & Shell

Mitglied: Socca07

Socca07 (Level 1) - Jetzt verbinden

02.06.2009, aktualisiert 12:07 Uhr, 7018 Aufrufe, 10 Kommentare

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
Mitglied: LotPings
02.06.2009 um 12:24 Uhr
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.

01.
set DateiOrdner=C:\Test 
02.
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.
Bitte warten ..
Mitglied: Socca07
02.06.2009 um 12:31 Uhr
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.
Bitte warten ..
Mitglied: Socca07
02.06.2009 um 12:39 Uhr
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
Bitte warten ..
Mitglied: LotPings
02.06.2009 um 12:48 Uhr
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
Bitte warten ..
Mitglied: Socca07
08.12.2009 um 19:10 Uhr
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.
01.
@ echo off 
02.
set pfad=d:\daten 
03.
set anwendung= 
04.
set stapel= 
05.
 
06.
cd %path% 
07.
dir /a:d /b >struktur.txt 
08.
set /a x1=1 
09.
for /f "tokens=1 delims=~" %%i in (%pfad%\struktur.txt) do call :ablauf %%i 
10.
goto eof 
11.
 
12.
:ablauf 
13.
echo on 
14.
set /a x1=%x1% 
15.
cd "%pfad%\%1" 
16.
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]
Bitte warten ..
Mitglied: Biber
08.12.2009 um 21:33 Uhr
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
Bitte warten ..
Mitglied: Socca07
09.12.2009 um 09:40 Uhr
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
Bitte warten ..
Mitglied: Socca07
09.12.2009 um 09:55 Uhr
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
Bitte warten ..
Mitglied: Socca07
09.12.2009 um 11:44 Uhr
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
Bitte warten ..
Mitglied: Socca07
15.12.2009 um 13:52 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...