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

Batch zum Auslesen von Filenamen zum Vergleich

Frage Entwicklung Batch & Shell

Mitglied: Skatastisch

Skatastisch (Level 1) - Jetzt verbinden

28.01.2010 um 20:39 Uhr, 4218 Aufrufe, 9 Kommentare

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ß
Mitglied: Edi.Pfisterer
28.01.2010 um 21:04 Uhr
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
Bitte warten ..
Mitglied: Skatastisch
28.01.2010 um 21:08 Uhr
Ja muss DOS sein

Mit anderen Skripten habe ich mehr Spielraum das weiß ich, jedoch hilft es nichts
Bitte warten ..
Mitglied: Edi.Pfisterer
28.01.2010 um 21:14 Uhr
also in etwa so (ohne gewähr)
01.
 
02.
'Variablen & Konstanten erstellen 
03.
Dim fso, fsoFile, Pfad 
04.
Const ForReading = 1, ForWriting = 2, ForAppending = 8 
05.
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 
06.
Pfad = "C:\Inetpub\wwwroot\Test.txt" 
07.
 
08.
'Objekte erstellen 
09.
set fso = Server.CreateObject("Scripting.FileSystemObject") 
10.
 
11.
If fso.FileExists(Pfad) Then 
12.
  set fsoFile = fso.OpenTextFile(Pfad, ForReading , true, TristateFalse) 
13.
Else 
14.
  Response.Write("Kleiner Fehler: Datei ist nicht vorhanden.") 
15.
End if 
16.
 
17.
'Text aus Datei lesen und ausgeben 
18.
Do while not fsoFile.AtEndOfStream 
19.
                 dateiname = fsoFile.ReadLine 
20.
                 dateiname = "C:\meinpfad\" & dateiname            'Damit du den vollen Pfad erhälst 
21.
 
22.
                 fso.DeleteFile(DATEINAME) 
23.
end if 
24.
 
25.
Loop 
26.
 
27.
'TextDatei schliessen und Objekte terminieren 
28.
fsoFile.close 
29.
set fsoFile = nothing 
30.
set fso = nothing
Bitte warten ..
Mitglied: Edi.Pfisterer
28.01.2010 um 21:15 Uhr
Sorry, zu spät gelesen....

DOS ist keine meiner spezialitäten
sorry...

Warum DOS? Hausübung?
Bitte warten ..
Mitglied: Biber
28.01.2010 um 21:18 Uhr
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)
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
Bitte warten ..
Mitglied: Skatastisch
28.01.2010 um 22:22 Uhr
Hallo Biber,

danke für die Begrüßung und es wäre natürlich schön wenn das Ganze gelöst werden kann

Also dann versuche ich das Ganze mal etwas genauer zu verdeutlichen:

zu 1:
Ist der Dateiname, welcher auch in der TXT-Datei in einer Zeile auftaucht vorhanden, soll diese gelöscht werden. Ignorier einfach den Teil wozu du so schön "häh" geschrieben hast weil das ist wirklich etwas dubios ausgedrückt

zu 2:
Ok fürs nächste Mal
Hier auch gleich der erste Test im Anschluss.

zu 3:
Damit hast du recht. Ich bin mir auch nicht wirklich sicher ob meine Schleife allgemein syntaktisch korrekt ist und unter Windows mit einer Batchdatei korrekt läuft
Von daher wollte ich nur mal meine Ansätze präsentieren, welche ich mir mit Schnipseln fast schon verzweifelt zusammengewürfelt habe.

zu 4:
Die Schönwetterbedingungen sind alle gegeben.
a: Ich befinde mich tatsächlich in diesem Verzeichnis und in diesem sind sowohl die TXT-Datei mit den Dateinamen
b: als auch die dort gelisteten Dateien
c: und es tauchen definitiv keine Leerzeichen im Namen.
d: das stimmt. eine Meldung hierfür wäre sicher hilfreich, jedoch klappte das bei mir mit %%i Übergabe zum Echo nicht warum auch immer

Neuer Ansatz:
- Ich befinde mich im Verzeichnis c:/xyz
- In diesem Verzeichnis befinden sich 5 Dateien mit den Dateinamen 1.tif, 2.tif, 3.tif, 4.tif, 5.tif
- In diesem Verzeichnis befindet sich eine TXT-Datei mit folgendem Inhalt:
1.tif
2.tif
3.tif
4.tif
6.tif

Nun bräuchte ich eine Schleife (oder auch gerne was anderes, wenn sich etwas anderes besser eignet) die mir jede Zeile einzeln ausliest,
überprüft ob die Datei vorhanden ist, falls ja diese löscht und dann zur nächsten Zeile übergeht und das gleiche macht.
Bitte warten ..
Mitglied: Biber
28.01.2010 um 22:55 Uhr
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
01.
::--EinBatchInXyz.bat 
02.
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
01.
::--EinBatchInXyz.bat 
02.
for /f %%i in (dateinamen.txt) do ( 
03.
   if exist %%i ( 
04.
          echo Datei %%i ist da 
05.
   ) else ( 
06.
          echo Datei %%i nicht da 
07.
08.
)
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
Bitte warten ..
Mitglied: bastla
29.01.2010 um 00:01 Uhr
@urobe73
Da ist Dir ein wenig ASP reingerutscht :
01.
set fso = Server.CreateObject("Scripting.FileSystemObject") 
02.
Response.Write("Kleiner Fehler: Datei ist nicht vorhanden.")
In VBS:
01.
set fso = CreateObject("Scripting.FileSystemObject") 
02.
WScript.Echo "Kleiner Fehler: Datei ist nicht vorhanden."
Grüße
bastla
Bitte warten ..
Mitglied: Biber
05.02.2010 um 13:25 Uhr
Moin Skatastisch,

bist du inzwischen weitergekommen und kommt von dir noch Feedback zu diesem Beitrag?

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch vergleich von zwei dateien
gelöst Frage von realdavegerBatch & Shell6 Kommentare

Hallo, nach Jahrelangem zugucken, habe ich jetzt schlussendlich eine Frage welche ich selbst stelle. Ich versuche 2 zeiten aus ...

Batch & Shell
Textdateien vergleichen BATCH
gelöst Frage von FeudelFredBatch & Shell2 Kommentare

Moin Moin, ich bin komplett neu im Forum und habe auch keine sonderlich großen Erfahrungen mit Foren. Habe eine ...

Windows Tools
Batch Verzeichnis vergleichen, in einer anderes kopieren
Frage von cappu25Windows Tools11 Kommentare

Halloo an alle, ich habe jetzt schon verdammt lange rumprobiert und gegooglet aber ich bekomme keine Lösung hin. Folgendes: ...

Batch & Shell
Batch Vergleichen von Dateien
gelöst Frage von BlaberBatch & Shell2 Kommentare

Hallo Leute, ich habe ein kleines Problem bei einer Batch-Datei. In dieser versuche ich zwei Text-Dateien miteinander zu vergleichen, ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Necur-Botnet soll Erpressungstrojaner Scarab massenhaft verbreiten

Information von BassFishFox vor 28 MinutenErkennung und -Abwehr

12,5 Millionen Spam-Mails aus einem Bot-Netz mit 6 Millionen Computern? Eigentlich eine schwache Leistung. Die Erpresser setzen dabei auf ...

Microsoft

Nadeldrucker-Problem unter Windows - Microsoft liefert Updates

Information von BassFishFox vor 57 MinutenMicrosoft

Hat ja nicht lange gedauert. Nachdem die November-Updates für Windows 7, 8.1 und 10 zahlreiche Nadeldrucker lahmgelegt hatten, stellt ...

Linux

Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde

Information von Frank vor 8 StundenLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 1 TagBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Heiß diskutierte Inhalte
Router & Routing
Zwei Netzwerke erstellen
Frage von bunteblumeRouter & Routing14 Kommentare

Hallo Zusammen, Ich möchte gerne ein backup von einem bestimmten Folder welcher auf dem Server regelmässig synchronisiert wird auf ...

Linux
Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde
Information von FrankLinux13 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Windows 10
Alle Programme mit bestimmtem Namen automatisch (per GPO) deinstallieren
gelöst Frage von lordofremixesWindows 1012 Kommentare

Hallo zusammen, gibt es eine Möglichkeit, alle Programme beginnend mit z.B. "Dell" im Namen per Script und somit per ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...