2 votes

Est-il possible d'obtenir une liste récursive de répertoires avec des détails sous Windows ?

Par exemple, supposons que je veuille voir la taille de tous les fichiers *.txt dans une arborescence. Actuellement, je peux le faire :

dir *.txt /s

Mais la liste n'est pas bien formatée et est difficile à utiliser.

J'aimerais savoir si l'exemple suivant est possible en utilisant CMD (ou si nécessaire, PowerShell) :

C:\files>dir cache.sqlite /s

 Volume in drive C is HDD
 Volume Serial Number is 6789-ABCD

01/02/2005  00:01 AM            65,536  C:\files\about+addons\cache.sqlite
02/03/2006  01:04 AM            98,304  C:\files\app.asana.com\cache.sqlite
03/04/2007  02:07 AM         2,162,688  C:\files\app.slack.com\cache.sqlite
04/05/2008  03:10 AM            98,304  C:\files\bootstrap-vue.org\cache.sqlite
05/06/2009  04:13 AM           196,608  C:\files\dev.to\cache.sqlite
06/07/2010  05:16 AM            65,536  C:\files\developer.mozilla.org\cache.sqlite
07/08/2011  06:19 AM            98,304  C:\files\phys.org\cache.sqlite
08/09/2012  07:22 AM           786,432  C:\files\stackdev.io\cache.sqlite
09/10/2013  08:25 AM           458,752  C:\files\todo.zenkit.com\cache.sqlite
10/11/2014  09:28 AM            98,304  C:\files\www.bing.com\cache.sqlite
11/12/2015  10:31 AM            98,304  C:\files\www.infoworld.com\cache.sqlite
12/13/2016  11:34 AM            65,536  C:\files\www.oracle.com\cache.sqlite
01/14/2017  12:37 PM            98,304  C:\files\www.popularmechanics.com\cache.sqlite
02/15/2018  13:40 PM           327,680  C:\files\www.sitepoint.com\cache.sqlite
03/16/2019  14:43 PM            65,536  C:\files\www.yahoo.com\cache.sqlite
04/17/2020  15:46 PM            98,304  C:\files\www.zdnet.com\cache.sqlite
     Total Files Listed:
              24 File(s)     4,882,432 bytes
              16 Dir(s)  208,862,339,072 bytes free

3voto

Vous pouvez utiliser get-childitem et sélectionnez les valeurs des propriétés du fichier avec ou sans l'aide de propriétés calculées pour aider à obtenir les valeurs de sortie souhaitées.

Récursif avec le nom complet du fichier et une propriété calculée "Taille MB".

Get-ChildItem -Path "C:\files\*.txt" -Recurse | 
Select @{Name="MB Size";Expression={ "{0:N1}" -f ($_.Length / 1MB) }}, Fullname, LastWriteTime;

Sortie

MB Size FullName                           LastWriteTime
------- --------                           -------------
21.2    C:\Files\Cell356.txt               2/24/2021 8:33:58 AM
0.9     C:\Files\Test123\best.txt          2/24/2021 8:16:29 AM
5.1     C:\Files\Test123\Test321\test.txt  2/24/2021 6:19:08 AM
0.5     C:\Files\Zeta\Cool123.txt          2/24/2021 6:13:05 AM
4.0     C:\Files\ZZettaa\zest.txt          2/24/2021 8:57:58 PM

Non-Recursive avec le nom du fichier et une propriété calculée "Taille MB".

Get-ChildItem -Path "C:\files\*.txt" | 
Select @{Name="MB Size";Expression={ "{0:N1}" -f ($_.Length / 1MB) }}, Name, LastWriteTime;

Exemple de sortie

MB Size Name         LastWriteTime
------- ----         -------------
21.2    Cell356.txt  2/24/2021 8:33:58 AM
0.9     best.txt     2/24/2021 8:16:29 AM
5.1     test.txt     2/24/2021 6:19:08 AM
0.5     Cool123.txt  2/24/2021 6:13:05 AM
4.0     zest.txt     2/24/2021 8:57:58 PM

Récursif avec suppression du dossier parent

$sdir = "c:\temp\stuff\";
Get-ChildItem -Path $sdir -Filter "*.txt" -File -Recurse |
Select  @{Name = "MB Size"; Expression = { "{0:N1}" -f ($_.Length / 1MB) }}, 
        @{Name = "sDir"; Expression = { $_.FullName.Replace($sdir,"") }}, 
        Fullname, LastWriteTime

Ressources d'appui

2voto

Poent Points 46

Powershell vous donnera les meilleurs résultats. Exécutez ceci et ouvrez les résultats dans Excel. Modifiez les chemins si nécessaire.

Get-ChildItem -recurse -path c:\files\*.txt | export-csv c:\files\here.csv

1voto

Sadam Points 114

Je suis nouveau dans le lot peut-être que ceci peut vous aider pour le répertoire actuel

for %F in (*.txt) do @echo %~zF  %F

pour les sous-répertoires

for /f %F in ('dir /s /r /b *.txt') do @echo %~zF  %F

Sortie

163197  O:\170801072959IMG-20170622-WA0006.txt
729213  O:\170805042647DSC033881.txt
679900  O:\170805045024crop.txt
723650  O:\170805071247temp.txt
66632  O:\170817035334DSC03625_comp.txt
89448  O:\170817035545DSC03569_comp.txt
84730  O:\pics\151104051533IMG_20151103_111229.txt

1voto

pbarney Points 537

Grâce aux conseils de quelques personnes ici présentes, j'ai pu tout rassembler pour obtenir (presque) exactement ce que je voulais :

# check for arguments
if (!$args) { echo "Please specify [path\]filespec. i.e., c:\temp\*.txt or *.txt"; return }
# get the path only
$path = Split-Path $Args  | Where-Object {$_ -ne ''}| Convert-Path
# if no path was specified, use the current directory
$path = IF ([string]::IsNullOrWhitespace($path)){ $pwd.path } else { $path }
# get the filespec (*.txt)
$filespec = Split-Path $Args -Leaf
write-output "`nShowing all $filespec contained under $path"
Get-ChildItem -Path $path -Filter $filespec -File -Recurse |
Format-Table -Wrap @{ Name="Date"; Expression = { $_.LastWriteTime.ToString("MM/dd/yyyy  hh:mm:ss  ") }},
    @{ Name="Size"; Expression = { "{0,15:N0}" -f $_.Length }; Alignment="right"; },
    @{ Name="File"; Expression = { ($_.FullName -ireplace [regex]::Escape($path), "").TrimStart("\") }}

Il n'y a pas de totaux à la fin, mais ce n'est pas grave.

PS C:\> C:\utils\sdir.ps1 \users\default\documents\*.txt

Showing all *.txt contained under C:\users\default\documents

Date                              Size File
----                             ----- ----
11/14/2013  01:34:29               970 in\text\people.txt
08/27/2013  11:43:48               498 in\text\review.txt
08/14/2020  05:55:20               176 store\Documentation\Temporary0.txt
08/14/2020  05:55:20                52 store\Documentation\Temporary1.txt
08/14/2020  05:55:21               559 store\Documentation\Logs\Debug log.txt
01/20/2015  04:09:15             5,610 Letters\Letter.txt
12/30/2008  01:43:40             2,212 Misc\Poster.txt
07/30/2011  11:46:58               918 Misc\comments.txt
08/14/2010  04:13:04               523 Misc\Daily.txt
08/31/2010  08:51:24             2,840 Misc\review\overview.txt
01/05/2009  08:04:52             1,768 Misc\review\other.txt

Le seul problème est si vous spécifiez un répertoire sans spécification de fichier (par exemple, c:\temp à l'opposé de c:\temp\*.* ) et j'aimerais également que les colonnes soient plus espacées.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X