Czy istnieje sposób wyszukiwania plików w katalogu na podstawie daty? Chcę znaleźć wszystkie pliki z datą utworzenia większą niż konkretna data, czy można to zrobić za pomocą polecenia dir
?Wyszukiwanie według daty za pomocą linii poleceń
Odpowiedz
dir
sama nie można filtrować według daty, ale można przeanalizować dane wyjściowe polecenia dir
za pomocą komendy for
. Jeśli w twoim kraju dir
drukuje datę w formacie YMD, musisz tylko porównać ją z podaną datą. Jeśli kolejność części daty jest inna, musisz użyć innej komendy for
, aby przeanalizować datę i zmienić ją na YMD. Spowoduje to wyświetlenie listy plików zmodyfikowanych po 5-tym Februrary.
@Echo Off
for /f "usebackq tokens=1,4 skip=5" %%A in (`dir /-c`) do (
if %%A GTR 2012-02-05 echo %%A %%B
)
if
robi standardowe porównanie ciąg, więc w końcu można uzyskać dodatkową linię jeśli podsumowanie linia przechodzi przez porównanie. Aby tego uniknąć, można użyć if %%A GTR 2012-02-05 if exist %%B echo %%A %%B
EDIT: Jest nawet lepsze podejście który unika parsowanie dir
wyjścia, a także umożliwia wyszukiwanie według czasu, nie tylko by Date:
@Echo Off
for /r %%A in (*) do (
if "%%~tA" GTR "2012-02-05 00:00" echo %%~tA %%A
)
dziękuję, to jest to, czego potrzebuję, czy mogę użyć godziny: minuty z porównaniem. Wreszcie są pomocne książki do nauki skryptów powłoki. – developer
Aby użyć minut w porównaniu, należy wprowadzić następujące zmiany: 'tokeny = 1,2,4', a następnie' jeśli "%% A %% B" GTR "2012-02-05 11:23" echo %% A %% B %% C' Aby się nauczyć, możesz zacząć od http://pl.wikipedia.org/wiki/Batch_file, a następnie przejść do trzech pierwszych zewnętrznych linków. – MBu
Cóż mogę o ile wiem, ale tego rodzaju, że będzie działać, ale nadal bardzo bezużyteczne, chyba że mają krótki zakres dat;)
for /R %a in (01 02 03 04 05) do dir | find "02/%a/2012"
Nice! Użyj 'dir/tc' do pracy z datami tworzenia. – Marc
właśnie odkrył komendy forfiles
.
forfiles /s /m *.log /d -7 /c "cmd /c echo @path"
wyświetli wszystkie pliki dziennika zmodyfikowane więcej niż siedem dni, we wszystkich podkatalogów, choć nie wydaje się, aby spojrzeć na daty utworzenia. Obsługuje określenie konkretnej daty.
Aby uzyskać więcej informacji, patrz forfiles /?
.
Super-użyteczny! (gdy nie ma dostępnej powłoki PowerShell) UWAGA: Jeśli chcesz zmodyfikować pliki po dacie, potrzebujesz '+' zamiast '-' dla parametru'/d', więc np. '+ 02/05/2012' zamiast' -7 '. Aby wyświetlić dane wyjściowe daty i czasu dla każdego pliku, możesz użyć polecenia 'cmd/c echo @fdate @ftime @ path' – bob
+1 To powinno być zaakceptowaną odpowiedzią –
Zastrzeżenie: Biada tym, którzy chcą używać ścieżek UNC. Lub w wielu innych miejscach w Windows ... –
Jest to łatwe do wykonania dzięki PowerShell. Wiem, że twoje pytanie dotyczyło cmd, ale PS jest zawarte w Windowsie 7 i późniejszych. Może być również zainstalowany na XP i Vista.
Użyj polecenia Get-ChildItem
(alias jako dir
), aby uzyskać wszystkie pliki. Wyprowadź dane wyjściowe do polecenia Where-Object
(alias jako ?
), aby zwrócić pliki, których data jest większa niż (-gt
) określonej daty.
Dla PowerShell 2.0 (domyślnie w systemie Windows 7), należy użyć scriptblock:
dir -file | ? {$_.LastWriteTimeUtc -gt ([datetime]"2013-05-01")}
Dla PowerShell 3.0 (domyślnie w Windows 8) i maksymalnie można użyć tej prostszą składnię Zamiast:
dir -file | ? LastWriteTimeUtc -gt ([datetime]"2013-05-01")
Komenda dir -file
zwraca kolekcję obiektów System.IO.FileInfo
. Ten obiekt pliku ma wiele właściwości, które można wykorzystać do złożonego filtrowania (rozmiar pliku, data utworzenia itp.). Zobacz dokumentację w dokumencie MSDN.
Próbowałem: reż. * .svg | ? LastWriteTimeUtc -gt ([datetime] "2013-05-01"), ale otrzymał "Where-Object: Can not bind parameter" FilterScript. "Nie można przekonwertować wartości" LastWriteTimeUtc "typu" System.String ", aby wpisać" System.Management .Automation.ScriptBlock ". –
Składnia, której użyłem, działa na PS 3.0 i wyżej, ale wierzę, że jeśli masz PS 1.0 lub 2.0, musisz użyć skryptu takiego jak:' |? {$ _. LastWriteTimeUtc -gt ([datetime] "2013-05-01")} ' – bouvierr
Ah Jestem na Windows 7 z PS 2. Dzięki –
łatwiejszy sposób dla mnie jest czymś
dir /s *.xlsx | find "07/14/2016"
'dir/OD' będą sortować według daty, przynajmniej – nolegs
reż nie może, ale Unix znaleźć polecenia * można *. [Port Dos dostępny tutaj] (http://sourceforge.net/projects/unxutils/) –
http://superuser.com/a/326025/3588 na SuperUser to eleganckie rozwiązanie wykorzystujące 'xcopy' bez faktycznego kopiowania –