Ich versuche, mit einer FOR / R-Schleife einige Ordner mit besonders langen Namen zu durchlaufen (die länger als 260 Zeichen sind, daher muss \? \ Verwendet werden). Ich brauche aus der Schleife den vollqualifizierten Pfadnamen und die letzte Zugriffszeit
Wenn ich das mache:
for /r "\\?\c:\windows" %a in (*.bat) do echo %~fta
Ich erhalte den vollständigen Pfad und die letzte geänderte Zeit. Selbst wenn ich DIRCMD auf / TA setze, scheint es keine Auswirkungen auf FOR / R zu geben Kennt jemand eine Möglichkeit, um zu erzwingen, dass auf diese Zeit / dieses Datum zuletzt zugegriffen wird, anstatt sie zuletzt zu ändern? AFAIK, der lange Pfadname, schließt Powershell aus, was mein ursprünglicher Ansatz war, aber ich freue mich auch darüber, Vorschläge zu erhalten.
command-line
batch
powershell
Dave_J
quelle
quelle
for /f "delims=" %%F in ('dir /o:d /t:a /s /b "c:\myPath\*"') @echo %%~tF %%F
Gibt nicht dasselbe Datum aus wie nur dir / t: a also zurück zu Feld 1, leider. @AFH ja, die Zeitstempel sind da und kämpfen nur darum, an sie heranzukommen.dir
Verwenden Sie in Ihrer Schleife dann Filter wiegrep
undsed
odercut
die Zeitstempel zu extrahieren, die Sie benötigen? Hierbei handelt es sich um Unix-Dienstprogramme, die mehrfach auf Windows portiert wurden, einschließlich der MS-eigenen Dienste für Unix.Antworten:
Versuchen Sie, dies mit subst zu umgehen.
Die Situation ist nicht zu einfach. Aber Sie können kombinieren: A. Verwenden Sie dir, um das aktuelle Datum abzurufen (es befindet sich immer an derselben Position). + B. Verwenden von Debug, um dies zu filtern. + C. Verwenden von subst, um den Pfad vorübergehend zu verkürzen (Begrenzung auf 255 Zeichen durch Verringern umgehen).
quelle
Die folgenden Arbeiten (etwas grob) in Powershell
quelle