Назад | Перейти на главную страницу

.bat файлы, чтобы найти все файлы на диске больше X

Пока что я запускаю файл .bat, чтобы найти все мультимедийные файлы, хранящиеся на общем диске нашего студента, который затем записывает в файл .txt в моих документах, например:

каталог S: *. mp3 / s> "M: \ logs \ student \ mp3.txt"

Вероятно, это не лучший способ сделать это, и я знаю, что в 2008 R2, вероятно, есть лучшие инструменты, чтобы сделать это за меня. Сейчас я пытаюсь найти способ вести журнал только для файлов, размер которых, например, превышает 100 МБ. Можно ли это сделать в файлах .bat / cmd.exe, лучше использовать PowerShell или использовать функции в Server 2008R2?

PowerShell или VBScript - это то, что вам нужно. Я пробовал то, что вы делаете, с помощью сценария Shell, и в итоге вы выполняете много вызовов for () и findstr, удаляя запятые из размеров и т. Д.

VBScript имеет FileSystemObject - сделайте гугл.

В PowerShell есть get-childitem:

Get-childitem -LiteralPath <basepath> -Filter *.mp3 -recurse -erroraction silentlycontinue | where-object{ $_.length -gt 100MB }

Вышеупомянутый сканирует путь <basepath> и все подкаталоги для MP3> 100 МБ.

Затем вы можете добавить в «конвейер»:

| foreach-object{ //dosomething }

Онлайновая справка по PowerShell очень хороша; пытаться: get-help get-childitem -detailed например.

Удачного сценария!

Да, и не забывайте, что в Win2k8 есть "Диспетчер ресурсов файлового сервера" - отличный инструмент.

Тебе лучше использовать find.

@echo off
rem only files bigger than %threshold% MB are listed
set threshold=100

for /r %%F in (*) do call :foo %%~zF "%%F"
goto :eof

:foo
set size=%1
set size_mb=%size:~0,-6%
if not defined size_mb set size_mb=0
if %size_mb% GTR %threshold% echo.%~2
goto :eof

Подпрограмма, к сожалению, необходима, поскольку отложенное расширение не хотело того, как я извлекал мегабайты (да, действительно, мегабайты, а не мебибайты - мне это тоже не нравится, но здесь проще всего).

Обратите внимание, что этот подход не работает для файлов размером более двух эксабайт, поскольку cmd не может выполнять числовое сравнение со значениями, которые не помещаются в 32-разрядное целое число со знаком.

Код также можно найти в моем репозитории SVN.