Dir tc Befehl unter Windows 10 macht Probleme
Hallo
Hab hier ein schönes Phänomen.
Aktuell arbeite ich unter Win7 und habe dort eine Batch die mir einige Sachen kopiert und das älteste löscht.
Dazu verwende ich den dir /b /tc /-c Befehl, der auch wunderbar funktioniert.
Nun haben wir auf Windows 10 umgestellt und hier funktioniert das nicht mehr.
Nachdem ich dann auf der Konsole nachgesehen habe, wurde mir auch klar weshalb.
Der Befehl dir /tc Befehl funktioniert unter Windows 10 nicht mehr so wie er sollte :D
Aktuell habe ich dafür noch keine Lösung gefunden.
Hier mal der Code, der head Befehl kommt von den unixutils
Hab hier ein schönes Phänomen.
Aktuell arbeite ich unter Win7 und habe dort eine Batch die mir einige Sachen kopiert und das älteste löscht.
Dazu verwende ich den dir /b /tc /-c Befehl, der auch wunderbar funktioniert.
Nun haben wir auf Windows 10 umgestellt und hier funktioniert das nicht mehr.
Nachdem ich dann auf der Konsole nachgesehen habe, wurde mir auch klar weshalb.
Der Befehl dir /tc Befehl funktioniert unter Windows 10 nicht mehr so wie er sollte :D
Aktuell habe ich dafür noch keine Lösung gefunden.
Hier mal der Code, der head Befehl kommt von den unixutils
@echo off
Title MAIL BACKUP
set TAG=%date:~0,2%
set Monat=%date:~3,2%
set Jahr=%date:~6,6%
set SD-Karte=G:
set Mail-Klo=Y:
for /F %%a in ('"dir /b %SD-Karte% | wc -l"' ) do (set Anzahl=%%a )
@Echo %Anzahl%
if %Anzahl% == 3 goto del
goto copy
:del
for /f %%a in ('"dir /b /tc /-c %SD-Karte% | head -1"') do (set loesch=%%a)
rmdir /S /Q %SD-Karte%\%loesch%
goto copy
:copy
xcopy /s /h /a /r /e %Mail-Klo% %SD-Karte%\%TAG%.%Monat%.%Jahr%\
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 339148
Url: https://administrator.de/contentid/339148
Ausgedruckt am: 17.11.2024 um 19:11 Uhr
14 Kommentare
Neuester Kommentar
spielt das für den Befehl eine Rolle?
C:\>dir /?
Listet die Dateien und Unterverzeichnisse eines Verzeichnisses auf.
DIR [Laufwerk:][Pfad][Dateiname] [/A[[:]Attribute]] [/B] [/C] [/D] [/L] [/N]
[/O[[:]Folge]] [/P] [/Q] [/R] [/S] [/T[[:]Zeit]] [/W] [/X] [/4]
[Laufwerk:][Pfad][Dateiname]
Bezeichnet Laufwerk, Verzeichnis und/oder Dateien.
/A Listet Dateien mit angegebenen Attributen auf.
Attribute D Verzeichnisse R Schreibgeschützte Dateien
H Versteckte Dateien A Zu archivierende Dateien
S Systemdateien I Nicht indizierte Dateien
L Analysepunkte - vorangestellt kehrt die Bedeutung um.
/B Einfaches Format (keine Kopfdaten, keine Zusammenfassung).
/C Zeigt das Tausendertrennzeichen bei Dateigrößen an (Standard-
einstellung). Verwenden Sie /-C, um das Tausendertrennzeichen
nicht anzuzeigen.
/D Gleich wie Breitformat, jedoch nach Spalten sortiert.
/L Verwendet Kleinschreibung.
/N Neues, langes Listenformat (Dateinamen auf der rechten Seite).
/O Gibt die Liste sortiert aus.
Folge N Name (alphabetisch) S Größe (kleinere zuerst)
E Erweiterung (alphabetisch) D Datum/Zeit (ältere zuerst)
G Verzeichnisse zuerst - vorangestellt kehrt die
Reihenfolge um
/P Pausiert nach jeder vollen Bildschirmseite.
/Q Gibt den Besitzer der Datei aus.
/R Zeigt alternative Datenströme der Datei an.
/S Listet Dateien und alle Unterverzeichnisse auf.
/T Bestimmt welche Zeit verwendet wird (nur für NTFS).
Zeit C Erstellung
A Letzter Zugriff
W Letzter Schreibzugriff
/W Verwendet Breitformat für die Auflistung.
/X Zeigt die Kurznamen für Dateien mit Nicht-8Punkt3-Namen an.
Das Format ist das gleiche wie bei /N, wobei der Kurzname vor
dem Langnamen eingefügt wird. Wenn kein Kurzname vorhanden ist,
werden Leerzeichen angezeigt.
/4 Zeigt das Jahr vierstellig an.
Optionen können in der Umgebungsvariablen DIRCMD voreingestellt werden.
"-" vor einer Option setzt die Voreinstellung außer Kraft, z. B. DIR /-W.
Servus,
du hast in Zeile 11 und 19 vergessen das Pipe-Symbol zu escapen (^|) (ohne das hätte das auch in älteren Versionen nicht funktioniert!)
Btw. das Utility head ist hier überflüssig wenn du es in Zeile 19 so machst
Grüße Uwe
du hast in Zeile 11 und 19 vergessen das Pipe-Symbol zu escapen (^|) (ohne das hätte das auch in älteren Versionen nicht funktioniert!)
Btw. das Utility head ist hier überflüssig wenn du es in Zeile 19 so machst
for /f "skip=1 delims=" %%a in ('dir /b /tc /o-d "%SD-Karte%"') do set "loesch=%%a"
Gut da habe ich die weiteren doppelten Anführungszeichen übersehen, in dem Fall ist es OK aber trotzdem kein guter Stil. Außerdem würde dir der Löschbefehl auch das aktuelle File löschen wenn es kein zweites geben würde was dir mit dem alternativen Befehl oben nicht passiert .
Würde dir aber sowieso die Powershell empfehlen, unter Windows 10 noch Batch nutzen ist wie mit einem Käfer unter Wasser fahren .
Aber wieso geht das dann mit dir /tc mit exFAT und bei NTFS nicht?!
Geht nicht ist keine Fehlermeldung in einem Administrator-Forum. Was geht nicht?!Würde dir aber sowieso die Powershell empfehlen, unter Windows 10 noch Batch nutzen ist wie mit einem Käfer unter Wasser fahren .
gci 'G:' -File | sort CreationTime -Desc | select -Skip 1 | remove-item -Recurse -Force
Hi,
Wenn das Script einwanfrei funktioniert, warum eröffnest du denn dann hier ein Thema?
@colinardo hat Recht, ohne Escape der Pipe in der Schleife wird das nichts.
Aber natürlich musst du das nicht glauben, du darfst gern auch eine eigene Meinung haben.
Gruß
Wenn das Script einwanfrei funktioniert, warum eröffnest du denn dann hier ein Thema?
@colinardo hat Recht, ohne Escape der Pipe in der Schleife wird das nichts.
Aber natürlich musst du das nicht glauben, du darfst gern auch eine eigene Meinung haben.
Gruß
Nun ja nicht ist nicht richtig, sondern er löscht dann einfach irgendwas, aber eben nicht das älteste Verzeichnis.
Weil du mit deinem Befehl die Files nicht sortierst sondern nur mit /TC das Erstelldatum angibst aber eben nicht wie und nach was sortiert werden soll, schau dir meine Zeile oben mal ganz genau an besonders das /O-D.Achte hierauf:
Optionen können in der Umgebungsvariablen DIRCMD voreingestellt werden.
Dann wird auf deinem Windows 7 das Sortieren nach Zeit voreingestellt gewesen sein, denn Standardmäßig wird, ohne Angabe nach was sortiert werden soll, nicht nach Datum, sondern nach Dateiname aufsteigend sortiert!Also fehlt dir eindeutig der Schalter /OD damit es überhaupt funktionieren kann!
Listet die Dateien und Unterverzeichnisse eines Verzeichnisses auf.
DIR [Laufwerk:][Pfad][Dateiname] [/A[[:]Attribute]] [/B] [/C] [/D] [/L] [/N]
[/O[[:]Folge]] [/P] [/Q] [/R] [/S] [/T[[:]Zeit]] [/W] [/X] [/4]
[Laufwerk:][Pfad][Dateiname]
Bezeichnet Laufwerk, Verzeichnis und/oder Dateien.
/A Listet Dateien mit angegebenen Attributen auf.
Attribute D Verzeichnisse R Schreibgeschützte Dateien
H Versteckte Dateien A Zu archivierende Dateien
S Systemdateien I Nicht indizierte Dateien
L Analysepunkte - vorangestellt kehrt die Bedeutung um.
/B Einfaches Format (keine Kopfdaten, keine Zusammenfassung).
/C Zeigt das Tausendertrennzeichen bei Dateigrößen an (Standard-
einstellung). Verwenden Sie /-C, um das Tausendertrennzeichen
nicht anzuzeigen.
/D Gleich wie Breitformat, jedoch nach Spalten sortiert.
/L Verwendet Kleinschreibung.
/N Neues, langes Listenformat (Dateinamen auf der rechten Seite).
/O Gibt die Liste sortiert aus.
Folge N Name (alphabetisch) S Größe (kleinere zuerst)
E Erweiterung (alphabetisch) D Datum/Zeit (ältere zuerst)
G Verzeichnisse zuerst - vorangestellt kehrt die
Reihenfolge um
/P Pausiert nach jeder vollen Bildschirmseite.
/Q Gibt den Besitzer der Datei aus.
/R Zeigt alternative Datenströme der Datei an.
/S Listet Dateien und alle Unterverzeichnisse auf.
/T Bestimmt welche Zeit verwendet wird (nur für NTFS).
Zeit C Erstellung
A Letzter Zugriff
W Letzter Schreibzugriff
/W Verwendet Breitformat für die Auflistung.
/X Zeigt die Kurznamen für Dateien mit Nicht-8Punkt3-Namen an.
Das Format ist das gleiche wie bei /N, wobei der Kurzname vor
dem Langnamen eingefügt wird. Wenn kein Kurzname vorhanden ist,
werden Leerzeichen angezeigt.
/4 Zeigt das Jahr vierstellig an.
Optionen können in der Umgebungsvariablen DIRCMD voreingestellt werden.
"-" vor einer Option setzt die Voreinstellung außer Kraft, z. B. DIR /-W.
Wenn du unbedingt bei Batch bleiben möchtest, ändere deine Zeile 1 mal in
und füge ganz am Ende mal ein pause
ein. Vielleicht siehst du dann, wo es hakt.
@echo on & setlocal
und füge ganz am Ende mal ein pause
ein. Vielleicht siehst du dann, wo es hakt.
Wenn du die Standards in der Umgebungsvariablen DIRCMD, wie oben bereits erwähnt, nicht geändert hast, dann ja.
Grüße Uwe
Ist auch wieder seltsam.
Eher unwahrscheinlich wenn die Files mit aufsteigenden Namen versehen waren . Nur gut das das dir das jetzt aufgefallen ist. Im Katastrophenfall hättest du dir sonst in den A.... gebissen.Naja, danke dafür das ihr mir hierbei geholfen habt!!
Dafür sind wir da, keine Ursache.Grüße Uwe