Doppelte For-Schleife mit Dateiinformationen
Hallo
ich habe wohl noch ein kleines Anfängerproblem.
Ich habe zwei For-Schleifen mit denen ich zwei Dateilisten durchlaufen will:
in den Logs wurde folgender Befehl gespeichert: DIR /A-D /B
also nur Dateinamen ohne Verzeichnisse, bspw.
Jetzt möchte ich die Dateigrößen oder sonstige DAteiattribute (über %%~zD etc) beider Parameter auslesen.
Aber aus einem Grund, den ich nicht verstehe, funktioniert es nicht.
Es macht für mich dabei recht wenig Sinn, warum ich mit Batch die Dateigröße von %%K auslesen kann, aber nicht die Dateigröße von %%D, obwohl beides exakt die gleiche Syntax ist.
Hier wird mir nur die Meldung: "ECHO ist ausgeschaltet (OFF)." ausgegeben.
Die Dateinamen (also %%K und %%D) gibt er mir fehlerfrei aus.
Gruß
Tolwyn
ich habe wohl noch ein kleines Anfängerproblem.
Ich habe zwei For-Schleifen mit denen ich zwei Dateilisten durchlaufen will:
for /F "tokens=1 delims=:" %%K in (F:\log.txt) DO (
for /F "tokens=1 delims=:" %%D in (F:\logi.txt) DO (
@ECHO %%~zD
)
)
in den Logs wurde folgender Befehl gespeichert: DIR /A-D /B
also nur Dateinamen ohne Verzeichnisse, bspw.
textdatei_auslesen.bat
Jetzt möchte ich die Dateigrößen oder sonstige DAteiattribute (über %%~zD etc) beider Parameter auslesen.
Aber aus einem Grund, den ich nicht verstehe, funktioniert es nicht.
Es macht für mich dabei recht wenig Sinn, warum ich mit Batch die Dateigröße von %%K auslesen kann, aber nicht die Dateigröße von %%D, obwohl beides exakt die gleiche Syntax ist.
Hier wird mir nur die Meldung: "ECHO ist ausgeschaltet (OFF)." ausgegeben.
Die Dateinamen (also %%K und %%D) gibt er mir fehlerfrei aus.
Gruß
Tolwyn
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 95592
Url: https://administrator.de/forum/doppelte-for-schleife-mit-dateiinformationen-95592.html
Ausgedruckt am: 26.12.2024 um 12:12 Uhr
5 Kommentare
Neuester Kommentar
Hallo Tolwyn!
Da Du in den Dateilisten keine Pfadangaben gespeichert hast, werden vermutlich die Dateien aus "F:\logi.txt" nicht gefunden (während jene aus "F:\log.txt" im aktuellen Verzeichnis liegen dürften und deshalb auch ohne Pfad angesprochen werden können).
Du könntest aber die Listen von Vornherein gleich so erstellen:
Was hast Du eigentlich überhaupt vor? So, wie die Schleifen derzeit geschachtelt sind, werden für jede Datei aus "F:\log.txt" alle Dateien aus "F:\logi.txt" durchlaufen - soferne weiterhin nur ein Größenvergleich für eine nachfolgende Kopieraktion gefragt wäre, ließe sich das vermutlich effektiver lösen (wie schon in Deinem vorigen Beitrag gezeigt).
Eine letzte Anmerkung: Auch wenn in den Zeilen der Log-Dateien kein ":" vorkommen kann, wäre dennoch "delims=" der noch sicherere Weg, die gesamte Zeile am Stück zu lesen (dann kannst Du auch noch die Angabe "tokens=1" einsparen) ...
Grüße
bastla
Da Du in den Dateilisten keine Pfadangaben gespeichert hast, werden vermutlich die Dateien aus "F:\logi.txt" nicht gefunden (während jene aus "F:\log.txt" im aktuellen Verzeichnis liegen dürften und deshalb auch ohne Pfad angesprochen werden können).
Du könntest aber die Listen von Vornherein gleich so erstellen:
for /f "skip=5 tokens=3*" %%i in ('dir /-c /a-d^|findstr ":"') do @echo %%i "%%j">>F:\log.txt
Eine letzte Anmerkung: Auch wenn in den Zeilen der Log-Dateien kein ":" vorkommen kann, wäre dennoch "delims=" der noch sicherere Weg, die gesamte Zeile am Stück zu lesen (dann kannst Du auch noch die Angabe "tokens=1" einsparen) ...
Grüße
bastla
Hallo Tolwyn!
Abgesehen davon, dass ein %~zVariable nur für Schleifenvariable oder %0 bis %9 angewendet werden kann (und daher etwa so zu lösen wäre
hätte ich (auch aufgrund Deiner Rückmeldung) angenommen, dass die hier dargestellten Ansätze funktionieren ...
Grüße
bastla
Abgesehen davon, dass ein %~zVariable nur für Schleifenvariable oder %0 bis %9 angewendet werden kann (und daher etwa so zu lösen wäre
for /f "delims=" %%D in ("F:\test\%%K") do echo %%~zD
Grüße
bastla
Hallo Tolwyn!
Grüße
bastla
Wenn man direkt auf die Dateien im Ordner zugreifen kann, wieso packt man das überhaupt noch in "eine Textdatei" mit dem dir Befehl?
"Man" warst ja in diesem Fall eigentlich nur Du selbst - miniversum hatte bereits darauf hingewiesen, dass es auch ohne Textdatei geht, und in meiner Version kommen weder "dir" noch Temporärdateien zum Einsatz.Kann Windows bei dem direkten Zugriff evtl keine versteckten Dateien finden?
Das wäre tatsächlich ein Argument für die Verwendung des "dir", nicht aber für eine Umleitung in eine Datei (das "dir"-Ergebnis kannst Du ja in einer "for /f"-Schleife direkt abhandeln) - allerdings war aus Deinem Beitrag nicht hervorgegangen, dass versteckte Dateien zu berücksichtigen wären ...Was bewirkt das >nul ?
Ist das nochmal eine Überprüfung vor dem Copy-befehl, ob das Ziel existiert?
Eine nochmalige Überprüfung wäre gar nicht sinnvoll, da aufgrund der vorhergehenden Abfragen bereits feststeht, dass kopiert werden soll - es geht hier nur um "Kosmetik" (was Du leicht nachvollziehen kannst, wenn Du ">nul" weglässt) ...Ist das nochmal eine Überprüfung vor dem Copy-befehl, ob das Ziel existiert?
Grüße
bastla