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

gelöst Doppelte For-Schleife mit Dateiinformationen

Mitglied: Tolwyn

Tolwyn (Level 1) - Jetzt verbinden

28.08.2008, aktualisiert 18.10.2012, 5777 Aufrufe, 5 Kommentare

Hallo

ich habe wohl noch ein kleines Anfängerproblem.

Ich habe zwei For-Schleifen mit denen ich zwei Dateilisten durchlaufen will:

01.
 
02.
for /F "tokens=1 delims=:" %%K in (F:\log.txt) DO (  
03.
	 
04.
	for /F "tokens=1 delims=:" %%D in (F:\logi.txt) DO (	 
05.
		 
06.
		@ECHO %%~zD 
07.
	 
08.
09.
 
10.
11.
 
in den Logs wurde folgender Befehl gespeichert: DIR /A-D /B

also nur Dateinamen ohne Verzeichnisse, bspw.

01.
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
Mitglied: bastla
29.08.2008 um 00:29 Uhr
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:
01.
for /f "skip=5 tokens=3*" %%i in ('dir /-c /a-d^|findstr ":"') do @echo %%i "%%j">>F:\log.txt
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
Bitte warten ..
Mitglied: Tolwyn
29.08.2008 um 11:08 Uhr
erstmal der Kommentar zum Kommentar:

ja, das war der fehler, allerdings hab ich dafür noch keine lösung (siehe unten).
das mit den delims=" ist gut;
die dateiliste direkt in die for-schleife einzubauen, hab ich auch schon gemacht;
macht natürlich mehr Sinn für die "Endanwendung".
Da ich allerdings noch mit ein paar anderen dingen zu kämpfen habe, hab ichs erstmal gelassen, um eine Fehlerquelle weniger zu haben.

Die Fortsetzung:

hm im prinzip ist das nur eine "erweiterte" Lösung:

Ich hatte bei meinem alten Skript das Problem, dass ich nicht an die Dateigröße von der zweiten Datei rangekommen bin über die %%~zJ Option.

Deswegen hätte ich nun folgenden Aufbau gemacht:
01.
for (DAteiliste von Quelle %%I) (  
02.
  if(existiert %%I auch in Ziel?) ( 
03.
  ::ja?  
04.
    for(Dateiliste von Ziel durchlaufen %%J) 
05.
      if(%%I == %%J - sind die namen gleich?) 
06.
      ::ja?  
07.
        if(%%~zI GTR %%~zJ - ist die Quelldatei größer als die Zieldatei?) ( 
08.
          :: etc etc 
09.
10.
11.
      )  
12.
13.
)
Das Problem nochmal in Worte gefasst:

ich hab in jeweils beiden Ordnern mehrere Dateien und ich hab im Grunde genommen keine Ahnung in welchem Ordner welche Dateien liegen. Damit die Logik vllt doch mal etwas klarer wird: Es handelt sich um mp3s aus Radiomitschnitt
Und wenn ich jetzt mal wieder mitstreame, kann es natürlich sein, dass gerade ein Mix läuft, den ich schonmal oder nur teilweise habe.
Dann möchte ich aber natürlich die größere (vollständigere) Version ins Ziel kopieren.

Das hätte ich mit obigen Aufbau versucht.
Erstmal feststellen, ob überhaupt die Dateiliste durchlaufen werden muss (Zeit!) oder direkt kopiert werden kann.
und dann soll die Kopieraktion natürlich auch nicht für alle Dateien des Ziels durchgeführt werden, sondern nur für die eine Datei mit dem gleichen Namen.

Das Problem, dass ich jetzt immer noch habe: wie komm ich an die Größenangabe der Datei ran, die nicht im gleichen Verzeichnis liegt?

Wenn ich den Pfad mit in eine neue Variable kopiere, klappt das auch nicht..

01.
set datei=F:\test\%%K 
02.
@ECHO %datei% 
03.
@ECHO %%~zdatei
Gruß

Tolwyn
Bitte warten ..
Mitglied: bastla
29.08.2008, aktualisiert 18.10.2012
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
01.
for /f "delims=" %%D in ("F:\test\%%K") do echo %%~zD
hätte ich (auch aufgrund Deiner Rückmeldung) angenommen, dass die hier dargestellten Ansätze funktionieren ...

Grüße
bastla
Bitte warten ..
Mitglied: Tolwyn
30.08.2008 um 11:55 Uhr
Hi

also ich hab mir deine Version aus dem letzten Beitrag nochmal genauer angeschaut.

Wenn man direkt auf die Dateien im Ordner zugreifen kann, wieso packt man das überhaupt noch in "eine Textdatei" mit dem dir Befehl? Kann Windows bei dem direkten Zugriff evtl keine versteckten Dateien finden?

Die einzige Zeile die ich nicht verstehe ist diese hier:

01.
copy "%%i" "%Ziel%\">nul 
Was bewirkt das >nul ?
Ist das nochmal eine Überprüfung vor dem Copy-befehl, ob das Ziel existiert?

Auf die Dateiattribute lässt sich also nur per Pfad zugreifen (logisch), dazu muss die Datei entweder im gleichen Verzeichnis sein, auf das andere Verzeichnis direkt zugreifen (so wie du es gemacht hast) oder auf eine Textdatei zugreifen in der die Dateien samt Pfad gespeichert sind (klingt umständlich zu realisieren).

Danke für deine Hilfe.

Gruß

Tolwyn
Bitte warten ..
Mitglied: bastla
30.08.2008 um 19:49 Uhr
Hallo Tolwyn!

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) ...

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch Schleife als FOR-SCHLEIFE
gelöst Frage von mp2711Batch & Shell2 Kommentare

Mit den FOR-Schleifen habe ich mich leider bislang zu selten auseinander gesetzt, aber da ich sonst gerade nicht weiter ...

Batch & Shell

FOR Schleife mit LOOP und nachfolgender FOR Schleife

gelöst Frage von miczarBatch & Shell6 Kommentare

Hallo zusammen, ich habe ein Problem mit einem Batchfile. Situation: im Netzwerk ist kein WINS mehr vorhanden und so ...

Batch & Shell

FOR Schleife läuft nicht

gelöst Frage von sugramBatch & Shell4 Kommentare

Hallo Ich glaube ich sehe den Wald vor lauter Bäumen nicht. Aber ich bekomme die FOR Schleife nicht zum ...

Batch & Shell

For Schleife kaputt?

gelöst Frage von Peter32Batch & Shell5 Kommentare

Hallo, ich finde den Fehler nicht irgendwie bekomme ich ständig denselben Inhalt in "Name.txt" und kann dann nicht weiterarbeiten ...

Neue Wissensbeiträge
iOS
IOS 11.2.6 verfügbar
Information von sabines vor 27 MinuteniOS

Mit dem Update soll der Bug behoben werden, bei dem eine bestimmte Zeichenkette IOS zum Absturz gebracht hat.

Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 14 StundenSicherheit

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 1 TagInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Erkennung und -Abwehr

Ups: Einfaches Nullzeichen hebelte den Anti-Malware-Schutzt in Windows 10 aus

Information von kgborn vor 1 TagErkennung und -Abwehr

Windows 10 ist das sicherste Windows aller Zeiten, wie Microsoft betont. Insidern ist aber klar, das es da Lücken, ...

Heiß diskutierte Inhalte
Server
Route-Befehl Unterstützung (unter CMD)
gelöst Frage von FKRR56Server37 Kommentare

Guten Tag , i.M. habe ich Probleme über den CMD-Route-Befehl ein Routing auf einen entfernten Server zuzulassen. Der Server ...

Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1028 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Microsoft
TV-Tipp: Das Microsoft-Dilemma
Information von kgbornMicrosoft17 Kommentare

Aktuell gibt es in Behörden und in Firmen eine fatale Abhängigkeit von Microsoft und dessen Produkten. Planlos agieren die ...

Webbrowser
Welcher Browser ist der Beste?
Frage von justtinWebbrowser15 Kommentare

Hallo Leute Ich habe eine interessante Frage. Mich wurde mal interessieren welcher Browser ist eure meinung nach der beste? ...