web-dev-qa-db-fra.com

Recherche par date en ligne de commande

Est-il possible de rechercher des fichiers dans un répertoire en fonction de la date? Je souhaite trouver tous les fichiers dont la date de création est supérieure à une date spécifique. Est-il possible de le faire avec la commande dir?

13
developer

dir par lui-même ne peut pas filtrer par date, mais vous pouvez analyser la sortie de dir en utilisant la commande for. Si, dans votre pays, dir imprime la date au format AMJ, il vous suffit de la comparer à une date donnée. Si l'ordre des parties de date est différent, vous devez alors utiliser une autre commande for pour analyser la date et la changer en JMD. Cela affichera une liste des fichiers modifiés après le 5 février.

@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 effectue une comparaison de chaîne standard. Vous pouvez ainsi obtenir une ligne supplémentaire si la ligne récapitulative réussit la comparaison. Pour l'éviter, vous pouvez utiliser if %%A GTR 2012-02-05 if exist %%B echo %%A %%B

EDIT: Il existe une approche encore meilleure qui évite l’analyse de la sortie de dir et permet également une recherche par heure, pas seulement par date

@Echo Off

for /r %%A in (*) do (
  if "%%~tA" GTR "2012-02-05 00:00" echo %%~tA %%A
)
4
MBu

Vient de découvrir la commande forfiles.

forfiles /s /m *.log /d -7 /c "cmd /c echo @path"

Répertoriera tous les fichiers journaux modifiés de plus de sept jours, dans tous les sous-répertoires, bien que cela ne semble pas prendre en compte la date de création. Il prend en charge la spécification d'une date spécifique.

Voir forfiles /? pour plus d'informations.

39
Dave

Eh bien, vous ne pouvez pas pour autant que je sache, mais ce type de réflexion fonctionnera, mais reste vraiment inutile à moins que vous n'ayez une courte période;)

for /R %a in (01 02 03 04 05) do dir | find "02/%a/2012"
3
Justin

un moyen plus facile pour moi est quelque chose comme

dir /s *.xlsx | find "07/14/2016"
2
skelly

C'est facile à faire avec PowerShell. Je sais que votre question portait sur cmd, mais PS est inclus dans Windows 7 et les versions ultérieures. Il peut également être installé sur XP et Vista. 

Utilisez la commande Get-ChildItem (alias dir) pour obtenir tous les fichiers. Dirigez la sortie vers la commande Where-Object (alias ?) pour renvoyer les fichiers dont la date est supérieure à (-gt) à une date spécifique.

Pour Powershell 2.0 (par défaut sous Windows 7), vous devez utiliser un scriptblock:

dir -file | ? {$_.LastWriteTimeUtc -gt ([datetime]"2013-05-01")}

Pour Powershell 3.0 (par défaut sous Windows 8) et plus récent, vous pouvez utiliser cette syntaxe plus simple à la place:

dir -file | ? LastWriteTimeUtc -gt ([datetime]"2013-05-01")

La commande dir -file renvoie une collection d'objets System.IO.FileInfo. Cet objet de fichier possède de nombreuses propriétés que vous pouvez utiliser pour un filtrage complexe (taille du fichier, date de création, etc.). Voir MSDN pour la documentation.

0
bouvierr