Batch zum Auslesen von Filenamen zum Vergleich
Hallo zusammen 
bin neu hier angekommen und habe schon viele Dinge hier im Forum nachgeforscht und viele Fragen wurden hier vorab bereits beantwortet. Von daher schon einmal vielen Dank für die tollen Beiträge und Hilfestellungen.
Zu meinem Problem das ich leider nicht wirklich hinbekomme:
Ich habe in einem Ordner c:/xyz eine .txt-Datei liegen. Der Inhalt der Datei sieht z.B. folgendermaßen aus:
datei1.tif
datei2.tif
datei3.tif
...usw.
Jetzt will ich jede Zeile und somit Dateinamen der txt-Datei auslesen und vergleichen ob die entsprechende Datei in Ordner c:/xyz vorhanden ist.
Falls ja, soll diese aus dem Ordner c:/xyz gelöscht werden. Falls nicht, soll sie bestehen bleiben.
Ich habe es mit einer einfachen For-Schleife versucht jedoch tut das nicht wirklich
Hier mein Ansatz:
for /f %%i in (dateinamen.txt) do (if exist %%i (echo Datei ist da) else (echo Datei nicht da))
Habe das mit dem Löschen noch nicht mit eingebaut, da ich mir nicht wirklich sicher bin wie ich eine Sprungmarke aufrufe und dort den aktuellen Zeilenwert übergebe.
Für eine Lösung wäre ich euch sehr dankbar
Wenn möglich mit einer kurzen Erklärung zu den Statements.
Vielen Dank schon einmal im Voraus.
Gruß
bin neu hier angekommen und habe schon viele Dinge hier im Forum nachgeforscht und viele Fragen wurden hier vorab bereits beantwortet. Von daher schon einmal vielen Dank für die tollen Beiträge und Hilfestellungen.
Zu meinem Problem das ich leider nicht wirklich hinbekomme:
Ich habe in einem Ordner c:/xyz eine .txt-Datei liegen. Der Inhalt der Datei sieht z.B. folgendermaßen aus:
datei1.tif
datei2.tif
datei3.tif
...usw.
Jetzt will ich jede Zeile und somit Dateinamen der txt-Datei auslesen und vergleichen ob die entsprechende Datei in Ordner c:/xyz vorhanden ist.
Falls ja, soll diese aus dem Ordner c:/xyz gelöscht werden. Falls nicht, soll sie bestehen bleiben.
Ich habe es mit einer einfachen For-Schleife versucht jedoch tut das nicht wirklich
Hier mein Ansatz:
for /f %%i in (dateinamen.txt) do (if exist %%i (echo Datei ist da) else (echo Datei nicht da))
Habe das mit dem Löschen noch nicht mit eingebaut, da ich mir nicht wirklich sicher bin wie ich eine Sprungmarke aufrufe und dort den aktuellen Zeilenwert übergebe.
Für eine Lösung wäre ich euch sehr dankbar
Vielen Dank schon einmal im Voraus.
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 134641
Url: https://administrator.de/forum/batch-zum-auslesen-von-filenamen-zum-vergleich-134641.html
Ausgedruckt am: 21.04.2025 um 23:04 Uhr
9 Kommentare
Neuester Kommentar
Hallo!
Muss Deine Lösung in DOS geschrieben sein?
Falls nicht:
VBScript ist Dein Freund
Stichwort
FileSystemObject
Ansatz:
xyz.txt mit FileSystemObject öffnen
Zeilen auslesen
for next schleife
Datei löschen
hoffe, das hilft dir weiter...
gutes gelingen
Muss Deine Lösung in DOS geschrieben sein?
Falls nicht:
VBScript ist Dein Freund
Stichwort
FileSystemObject
Ansatz:
xyz.txt mit FileSystemObject öffnen
Zeilen auslesen
for next schleife
Datei löschen
hoffe, das hilft dir weiter...
gutes gelingen
also in etwa so (ohne gewähr)
'Variablen & Konstanten erstellen
Dim fso, fsoFile, Pfad
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Pfad = "C:\Inetpub\wwwroot\Test.txt"
'Objekte erstellen
set fso = Server.CreateObject("Scripting.FileSystemObject")
If fso.FileExists(Pfad) Then
set fsoFile = fso.OpenTextFile(Pfad, ForReading , true, TristateFalse)
Else
Response.Write("Kleiner Fehler: Datei ist nicht vorhanden.")
End if
'Text aus Datei lesen und ausgeben
Do while not fsoFile.AtEndOfStream
dateiname = fsoFile.ReadLine
dateiname = "C:\meinpfad\" & dateiname 'Damit du den vollen Pfad erhälst
fso.DeleteFile(DATEINAME)
end if
Loop
'TextDatei schliessen und Objekte terminieren
fsoFile.close
set fsoFile = nothing
set fso = nothing
Moin Skatastisch,
willkommen im Forum.
Und -versprochen- wir bringen dich schon auf den richtigen Weg.
Aber wir müssen erstmal das Werkzeug bereitlegen, bzw. die Fundamente legen.
1)
2)
Codeschipsel gehören in Code-Tags, siehe in unseren FAQ.
3)
4)
Deine Batch-Zeile funktioniert ja durchaus, aber eben nur unter Schönwetterbedingungen...
a) Du musst bei Aufruf des Batch-Schnipsels im Verzeichnis C:\xyz sein, damit die "dateinamen.txt" gefunden wird
b) und damit die dort gelisteten Dateien gefunden werden
c) und es dürfen keine Dateien mit "Leerzeichen im Namen.gif" vorkommen
d) und -obwiohl du den Dateinamen %%i in der Hand hast, erfährst du beim "echo" weder im Erfolgs- noch im Fehlerfall, welche Datei gelöscht/nicht gefunden wurde.
Lass uns da mal Schritt für Schritt durch.
Grüße
Biber
willkommen im Forum.
Und -versprochen- wir bringen dich schon auf den richtigen Weg.
Aber wir müssen erstmal das Werkzeug bereitlegen, bzw. die Fundamente legen.
1)
Jetzt will ich jede Zeile und somit Dateinamen der txt-Datei auslesen und vergleichen ob die entsprechende Datei in Ordner c:/xyz vorhanden ist.
Okay..Falls ja, soll diese aus dem Ordner c:/xyz gelöscht werden.
Okay...Falls nicht, soll sie bestehen bleiben
Häh? falls nicht vorhanden, lassen wir sie einfach bestehen?2)
Codeschipsel gehören in Code-Tags, siehe in unseren FAQ.
3)
Ich habe es mit einer einfachen For-Schleife versucht jedoch tut das nicht wirklich
"tut das nicht wirklich" ist keine Fehlerbeschreibung.4)
Deine Batch-Zeile funktioniert ja durchaus, aber eben nur unter Schönwetterbedingungen...
a) Du musst bei Aufruf des Batch-Schnipsels im Verzeichnis C:\xyz sein, damit die "dateinamen.txt" gefunden wird
b) und damit die dort gelisteten Dateien gefunden werden
c) und es dürfen keine Dateien mit "Leerzeichen im Namen.gif" vorkommen
d) und -obwiohl du den Dateinamen %%i in der Hand hast, erfährst du beim "echo" weder im Erfolgs- noch im Fehlerfall, welche Datei gelöscht/nicht gefunden wurde.
Lass uns da mal Schritt für Schritt durch.
Grüße
Biber
Moin Skatatisch,
nun denn, für deine Anforderung brauchst du (wenn das schöne Wetter so bleibt) eigentlich nicht wirklich etwas ändern.
[OT]
Nur sicherheitshalber als Anmerkung, damit es uns nicht später einholt:
Die Schreibweise "..Verzeichnis C:/xyz .." ist Unix-Like. Unter Windows-Betriebssystemen immer den Backslask "C:\xyz " nehmen.
[/OT]
Deine Vorlage war ja
Der macht auch das, was du verlangst.
Aber du kannst ihn ein wenig "lesbarer" formatieren
Wenn du von diesem Gerüst ausgehst, dann wären die nächsten Verfeinerungsschritte
Grüße
Biber
nun denn, für deine Anforderung brauchst du (wenn das schöne Wetter so bleibt) eigentlich nicht wirklich etwas ändern.
[OT]
Nur sicherheitshalber als Anmerkung, damit es uns nicht später einholt:
Die Schreibweise "..Verzeichnis C:/xyz .." ist Unix-Like. Unter Windows-Betriebssystemen immer den Backslask "C:\xyz " nehmen.
[/OT]
Deine Vorlage war ja
::--EinBatchInXyz.bat
for /f %%i in (dateinamen.txt) do (if exist %%i (echo Datei ist da) else (echo Datei nicht da))
Der macht auch das, was du verlangst.
Aber du kannst ihn ein wenig "lesbarer" formatieren
::--EinBatchInXyz.bat
for /f %%i in (dateinamen.txt) do (
if exist %%i (
echo Datei %%i ist da
) else (
echo Datei %%i nicht da
)
)
Wenn du von diesem Gerüst ausgehst, dann wären die nächsten Verfeinerungsschritte
- dort, wo jetzt je eine Zeile "echo Irgend ein Anfang.." steht, dort könnten auch ein, zwei oder mehr zeilen rein, die im jeweiligen IF oder ELSE etwas Sinnvolles tun
- oder aber [alternativ / ebenso gut] könnte dieser logische Teil-"Block" dann ausgelagert werden und mit "call :meinDeleteBlock" oder so aufgerufen werden.
Grüße
Biber