sugram
Goto Top

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 face-wink

@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%\

Content-ID: 339148

Url: https://administrator.de/contentid/339148

Ausgedruckt am: 17.11.2024 um 19:11 Uhr

Kraemer
Kraemer 29.05.2017 um 07:55:56 Uhr
Goto Top
Moin,

die SD-Karte ist NTFS-Formatiert?

Gruß
sugram
sugram 29.05.2017 um 09:46:44 Uhr
Goto Top
Nein, ist sie nicht.
Das Format ist exFAT, steht so in Windows .

Darüber hab ich jetzt wirklich nicht nachgedacht, spielt das für den Befehl eine Rolle?
Kraemer
Kraemer 29.05.2017 um 09:57:49 Uhr
Goto Top
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.
colinardo
colinardo 29.05.2017 aktualisiert um 10:05:54 Uhr
Goto Top
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
for /f "skip=1 delims=" %%a in ('dir /b /tc /o-d "%SD-Karte%"') do set "loesch=%%a"  
Grüße Uwe
sugram
sugram 29.05.2017 um 10:42:53 Uhr
Goto Top
Ok gut

Aber wieso geht das dann mit dir /tc mit exFAT und bei NTFS nicht?!
Denn aktuell ist das zumindest bei mir so der Fall.


Zitat von @colinardo:

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
> for /f "skip=1 delims=" %%a in ('dir /b /tc /o-d "%SD-Karte%"') do set "loesch=%%a"  
> 
Grüße Uwe

Danke für den Hinweis!
colinardo
colinardo 29.05.2017 aktualisiert um 11:00:22 Uhr
Goto Top
Das Escaping des Pipe-Symbols hat nichts mit dem Paritionsstil zu tun, das ist Jacke wie Hose.
Ohne (^|) wird es nirgendwo funktionieren und die CMD sich beschweren.
sugram
sugram 29.05.2017 um 11:22:11 Uhr
Goto Top
Zitat von @colinardo:

Ohne (^|) wird es nirgendwo funktionieren und die CMD sich beschweren.

Naja, also das oben genannte Script funktioniert hier einwandfrei, auch ohne ^| face-wink
colinardo
Lösung colinardo 29.05.2017 aktualisiert um 11:50:07 Uhr
Goto Top
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 face-wink.
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 face-wink.
gci 'G:' -File | sort CreationTime -Desc | select -Skip 1 | remove-item -Recurse -Force  
114685
114685 29.05.2017 aktualisiert um 13:47:44 Uhr
Goto Top
Hi,

Zitat von @sugram:
Naja, also das oben genannte Script funktioniert hier einwandfrei, auch ohne ^| face-wink


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. face-wink

Gruß
sugram
sugram 29.05.2017 aktualisiert um 13:45:35 Uhr
Goto Top
Zitat von @114685:
Wenn das Script einwanfrei funktioniert, warum eröffnest du denn dann hier ein Thema?
Gruß

Weil das Script unter Windows 7 geht und unter Windows 10 nicht.

Nun ja nicht ist nicht richtig, sondern er löscht dann einfach irgendwas, aber eben nicht das älteste Verzeichnis.
colinardo
Lösung colinardo 29.05.2017 aktualisiert um 14:04:18 Uhr
Goto Top
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.
114685
114685 29.05.2017 aktualisiert um 14:02:01 Uhr
Goto Top
Wenn du unbedingt bei Batch bleiben möchtest, ändere deine Zeile 1 mal in
@echo on & setlocal 

und füge ganz am Ende mal ein pause

ein. Vielleicht siehst du dann, wo es hakt.
sugram
sugram 29.05.2017 aktualisiert um 17:07:31 Uhr
Goto Top
Zitat von @colinardo:
Also fehlt dir eindeutig der Schalter /OD damit es überhaupt funktionieren kann!



Hmm, das mit dem /OD hab ich gar nicht gesehen.
Damit klappt es nun wieder.

Dann war es also zufall das es immer unter Windows 7 ging?!
Ist auch wieder seltsam.
Naja, danke dafür das ihr mir hierbei geholfen habt!!
colinardo
colinardo 29.05.2017 aktualisiert um 18:09:21 Uhr
Goto Top
Zitat von @sugram:
Dann war es also zufall das es immer unter Windows 7 ging?!
Wenn du die Standards in der Umgebungsvariablen DIRCMD, wie oben bereits erwähnt, nicht geändert hast, dann ja.
Ist auch wieder seltsam.
Eher unwahrscheinlich wenn die Files mit aufsteigenden Namen versehen waren face-smile. 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