Поиск файлов размером 0 КБ в каталогах windows - PullRequest
1 голос
/ 13 июля 2020

У меня есть каталог, назовем его «учетные записи». Есть ~ 600 папок учетных записей, и в каждой из этих папок содержится папка IN (среди многих других).

ex)

\\networkfolder\ACCOUNT\account1\in
\\networkfolder\ACCOUNT\account2\in
\\networkfolder\ACCOUNT\account3\in
\\networkfolder\ACCOUNT\account4\in
\\networkfolder\ACCOUNT\account5\in

Есть ли эффективный способ / команда / tool для сканирования и вывода списка имен файлов (с их путями к файлам) в файле .txt размером 0 КБ?

  1. Пробовал расширенный поиск в Windows Explorer, занимает слишком много времени.
  2. Посмотрел пакетные скрипты, не уверен, будет ли это лучше.

Я пытаюсь сократить время, выполняя поиск только в папках IN в каждой из папок учетной записи, поскольку они Меня беспокоят только файлы размером 0 КБ.

Ответы [ 3 ]

0 голосов
/ 13 июля 2020

Вероятно, это можно сделать с помощью однострочника FOR l oop, но это может быть более понятным и поддерживаемым в будущем. Требуется PowerShell 5.1+. Если вы используете поддерживаемый компьютер Windows, он будет иметь или может иметь Windows PowerShell 5.1.

=== Get-ZeroInFileList.ps1

$BaseDir = 'C:\src\t'
$ResultFile = 'C:\src\t\zresult.txt'
Get-ChildItem -Recurse -Directory -Path $BaseDir -Filter 'in' |
    ForEach-Object {
        Get-ChildItem -File -Path $_.FullName |
            ForEach-Object {
                if ($_.Length -eq 0) { $_.FullName | Out-File -FilePath $ResultFile -Encoding ascii }
            }
    }

Вызвать его как команду cmd.exe, используя:

powershell -NoLogo -NoProfile -File "Get-ZeroInFileList.ps1"
0 голосов
/ 13 июля 2020

Это самый быстрый способ, который я могу придумать, если вам действительно нужен вывод текстового файла с выравниванием по левому краю, и игнорировать все 0-байтовые файлы не непосредственно внутри каталога с именем in

(For /F Tokens^=* %G In ('%__APPDIR__%Robocopy.exe "\\networkfolder\ACCOUNT" NULL /L /Max:1 /S /NC /NDL /NJH /NJS /NS^|%__APPDIR__%findstr.exe /EIR "\\in\\[^\\]*"')Do @Echo %G)>"emptyfiles.txt"

Если выравнивание и родительский каталог не имеют значения, вы можете вывести все 0-байтовые файлы в любом месте каталога ACCOUNT следующим образом:

%__APPDIR__%Robocopy.exe "\\networkfolder\ACCOUNT" NULL /L /Max:1 /S /NC /NDL /NJH /NJS /NS>"emptyfiles.txt"
0 голосов
/ 13 июля 2020

Я не знаю, можно ли это сделать с чистым dir, но у меня есть решение с for:

@echo off
for /r %%S in (in\*.*) do if %%~zS==0 echo %%S is 0 bytes

При этом вы выполняете цикл для каждого файла в каталогах и подкаталоги и получить его размер с помощью %%~zvar (в данном случае %%~zS). Затем используйте if, чтобы узнать, равен ли размер 0 байтам. Если это так, выведите на экран эхо [full path of file] is 0 bytes.

...