Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Проверка файлов в сетевом каталоге, и создание списка из тех которые по размеру < N (http://forum.oszone.net/showthread.php?t=279176)

wonted 13-03-2014 14:09 2323007

Проверка файлов в сетевом каталоге, и создание списка из тех которые по размеру < N
 
Здравствуйте, забрел вот недавно на Ваш ресурс, пересмотрел кучу подобного материала, и к сожалению не смог решить свою задачу. Надеюсь на помощь а не осуждение. Заранее огромное спасибо.
Задача:
есть сетевая папка в вложенными под папками \\some_dir\local_dir\
необходимо просканировать эту папку, все под папки на предмет наявности фалов размеров свыше N байт
необходимо полученный результат* дописать в лог файл лежащий под боком у батника
вот что имеется, выдрано из этого форума, но там вместо логирования шло удаление, теперь от %%i похоже получаю ссылку на файл и он открывается, а моя задача эту ссылку поместить в лог файл.
Код:

for /f "delims=" %%i in ('dir "E:\Downloads" /b /s /a-d') do if %%~zi gtr 50000000 %%i>>poisk.txt
п.с. прошу прощения если кого то обидел познаниями cmd/bat
*Путь к файлу хотя бы, оптимально путь к файлу + размер

Iska 13-03-2014 14:39 2323032

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sRootFolder=\\some_dir\local_dir
set /a lLimit = 50*1^<^<20

if exist "%sRootFolder%\." (
        >"poisk.txt" (
                for /f "usebackq delims=" %%i in (
                        `dir "%sRootFolder%\*.*" /b /s /a:-d`
                ) do if %%~zi gtr %lLimit% echo %%i
        )
) else (
        echo Can't find root folder [%sRootFolder%].
        exit /b 1
)

endlocal
exit /b 0

«50*1^<^<20» — «50×2²⁰», 50 Мб.

gora 13-03-2014 14:49 2323039

Цитата:

Цитата wonted
оптимально путь к файлу + размер »

Код:

@Echo Off
(for /f "delims=" %%i in ('dir "E:\My Downloads" /b /s /a-d') do if %%~zi gtr 50000000 Echo %%i %%~zi)>>poisk.txt


wonted 13-03-2014 14:53 2323040

Спасибо огромное! Все работает, осталось подружить с кириллицей, но это все мелочи

Iska 13-03-2014 14:53 2323041

А, недоглядел:
Цитата:

Цитата wonted
+ размер »

добавьте вывод, как у коллеги:
Цитата:

Цитата gora
Код:

… Echo %%i %%~zi
»

Цитата:

Цитата wonted
осталось подружить с кириллицей, »

Сохраните пакетный файл в кодировке OEM/866. Вывод будет в той же кодировке. Это нормально. Для корректного отображения используйте редактор, который понимает эту кодировку.

wonted 13-03-2014 15:05 2323047

Цитата:

Цитата Iska
%%i %%~zi »

прошу прощения но похоже даже в копиосте умудряюсь допустить ошибки)
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sRootFolder=E:\Downloads
set /a lLimit = 50*1^<^<20

if exist "%sRootFolder%\." (
        >"poisk.txt" (
                for /f "usebackq delims=" %%i in (
                        `dir "%sRootFolder%\*.*" /b /s /a:-d`
                ) do if %%~zi gtr %lLimit% echo %%i %%~zi
        )
) else (
        echo Can't find root folder [%sRootFolder%].
        exit /b 1
)

endlocal
exit /b 0

результат, до того как втулил параметр работало, а сейчас все файлы кидает
Код:

E:\>if 73820995 GTR 52428800 echo E:\Downloads\111.zip 73820995
E:\Downloads\111.zip 73820995

E:\>if 159281 GTR 52428800 echo E:\Downloads\Manual.pdf 159281

E:\>if 992864 GTR 52428800 echo E:\Downloads\Msvbvm50.exe 992864

E:\>if 702253 GTR 52428800 echo E:\Downloads\msvbvm50.zip 702253

E:\>if 73820995 GTR 52428800 echo E:\Downloads\Ќ®ў*п Ї*ЇЄ*\111.zip 73820995
E:\Downloads\Ќ®ў*п Ї*ЇЄ*\111.zip 73820995

E:\>if 159281 GTR 52428800 echo E:\Downloads\Ќ®ў*п Ї*ЇЄ*\Manual.pdf 159281

E:\>if 992864 GTR 52428800 echo E:\Downloads\Ќ®ў*п Ї*ЇЄ*\Msvbvm50.exe 992864

E:\>if 702253 GTR 52428800 echo E:\Downloads\Ќ®ў*п Ї*ЇЄ*\msvbvm50.zip 702253

E:\>if 73820995 GTR 52428800 echo E:\Downloads\Ќ®ў*п Ї*ЇЄ*\Ќ®ў*п Ї*ЇЄ*\111.zip 73820995
E:\Downloads\Ќ®ў*п Ї*ЇЄ*\Ќ®ў*п Ї*ЇЄ*\111.zip 73820995

E:\>if 159281 GTR 52428800 echo E:\Downloads\Ќ®ў*п Ї*ЇЄ*\Ќ®ў*п Ї*ЇЄ*\Manual.pdf 159281

E:\>if 992864 GTR 52428800 echo E:\Downloads\Ќ®ў*п Ї*ЇЄ*\Ќ®ў*п Ї*ЇЄ*\Msvbvm50.exe 992864

E:\>if 702253 GTR 52428800 echo E:\Downloads\Ќ®ў*п Ї*ЇЄ*\Ќ®ў*п Ї*ЇЄ*\msvbvm50.zip 702253

п.с. понял что дело в echo, вся строка отмечается как текст...

оишбка была в кодировке, осталось найти OEM/866 блокнот

Georgio 13-03-2014 15:18 2323050

Iska, а почему не
Код:

set /a lLimit = 50^<^<20
?

wonted 13-03-2014 15:24 2323057

Огромное спасибо парни! Вопрос полностью решен!
Может кому понадобится...
Итоговый код:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sRootFolder=E:\Downloads
set /a lLimit = 50*1^<^<20

if exist "%sRootFolder%\." (
        >"poisk.txt" (
                for /f "usebackq delims=" %%i in (
                        `dir "%sRootFolder%\*.*" /b /s /a:-d`
                ) do if %%~zi gtr %lLimit% echo %%i %%~zi )
) else (
        echo Can't find root folder [%sRootFolder%].
        exit /b 1
)

endlocal
exit /b 0

Результат работы:
Код:

E:\Downloads\111.zip 73820995
E:\Downloads\Новая папка\111.zip 73820995
E:\Downloads\Новая папка\Новая папка\111.zip 73820995

Цитата:

Цитата Georgio
50*1^<^<20 »

исходя из математики должно отработать...
так и получилось, выдает идентичный ответ

Iska 13-03-2014 16:16 2323075

Цитата:

Цитата Georgio
Iska, а почему не »

Просто для понятности. «a на b в степени n» привычней.

wonted 14-03-2014 09:35 2323403

к сожалению возникла новая проблема
Код:

Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\Users\it_support>E:\поиск.bat
Имя папки \\192.168.8.10\public\Проверить на сохранение\Мероприятия\лучшая школа
 России\нарезать1\нарезка для конкурса Образование\9Дополнительная информация и
приложения к Программе развития\17 дополнительные материалы к паспорту образоват
ельного учреждения\дополнительная информация об образовательном учреждении слишк
ом длинно.
Имя папки \\192.168.8.10\public\Проверить на сохранение\Мероприятия\лучшая школа
 России\нарезка для конкурса Образование\9Дополнительная информация и приложения
 к Программе развития\17 дополнительные материалы к паспорту образовательного уч
реждения\дополнительная информация об образовательном учреждении слишком длинно.

и как результат файл пуст батник висит, файлов конечно жутко много, но за пару часов думаю 50+ мб парочку точно нашлось бы. Возможно у кого есть идеи или догадки?
п.с. предполагаю что из за ошибки он попросту остановился на последнем каталоге, т.е. на каталоге с ошибкой

gora 14-03-2014 09:48 2323405

Цитата:

Цитата wonted
возникла новая проблема...
Возможно у кого есть идеи или догадки? »

У Вас же написана проблема, вот и решайте ее:
Код:

Имя папки \\192.168.8.10\public\Проверить на сохранение\Мероприятия\лучшая школа
 России\нарезать1\нарезка для конкурса Образование\9Дополнительная информация и
приложения к Программе развития\17 дополнительные материалы к паспорту образоват
ельного учреждения\дополнительная информация об образовательном учреждении слишком длинно.


Georgio 14-03-2014 12:08 2323477

Цитата:

Цитата wonted
Код:

Имя папки \\192.168.8.10\public\Проверить на сохранение\Мероприятия\лучшая школа
 России\нарезать1\нарезка для конкурса Образование\9Дополнительная информация и
приложения к Программе развития\17 дополнительные материалы к паспорту образоват
ельного учреждения\дополнительная информация об образовательном учреждении слишк
ом длинно.

»


Данная ошибка не критична для пакетного файла: он будет продолжать работать и выводить результаты, только содержимое такой папки не будет обрабатываться.

Могу предложить записывать эти ошибки в отдельный файл:
Код:

2>errors.txt
, а потом анализировать папки из списка ошибок также командой "dir", но при помощи создания для каждой такой папки виртуального диска (команда "subst").

wonted 14-03-2014 13:09 2323508

Цитата:

Цитата Georgio
, а потом анализировать папки из списка ошибок также командой "dir", но при помощи создания для каждой такой папки виртуального диска (команда "subst"). »

боюсь я затрудняюсь даже представить как это будет выглядеть в коде
Цитата:

Цитата Georgio
Данная ошибка не критична для пакетного файла: он будет продолжать работать и выводить результаты, только содержимое такой папки не будет обрабатываться. »

к сожалению вы не правы, бат файл за целый день не дописал не единой строки в текстовый файл, видимо все же это критическая ошибка, и он не продолжает проверять файлы

Iska 14-03-2014 13:50 2323530

Переходите на PowerShell. Рекурсия и фильтрация — его конёк.

Georgio 14-03-2014 14:22 2323548

Цитата:

Цитата wonted
видимо все же это критическая ошибка »

Вечером я подумаю над решением. Ещё, может быть, можно как-то использовать короткие имена.

wonted 14-03-2014 14:26 2323552

Цитата:

Цитата Iska
Переходите на PowerShell. Рекурсия и фильтрация — его конёк. »

спасибо за напутствие, по всей видимости это и будет выход, "букварь" в зубы и знакомится с PowerShell

Цитата:

Цитата Georgio
Вечером я подумаю над решением. Ещё, может быть, можно как-то использовать короткие имена. »

только в ручную укорачивать, и то не факт что получится, никому не пояснить что предложение в имени папки это не хорошо... а 10,15,20 таких папок одна в другой.... спасибо за старания, если будет вызывать заморочки, забудьте, оно того не стоит. я пока познакомлюсь с шелом, возможно в нем получится это реализовать.

Georgio 14-03-2014 14:41 2323565

Цитата:

Цитата wonted
в ручную укорачивать »

"Использовать короткие имена" -- это не физически их укорачивать, а применять команду "dir" с параметром "/x".

Georgio 14-03-2014 23:02 2323681

Код:

@>poisk.txt robocopy "E:\Downloads" %random% /bytes /nc /ndl /njh /njs /l /s /min:52428800
Вот и всё решение. Ничто никуда не копируется, создаётся только нужный Вам список. Длинные пути поддерживаются по умолчанию. Если у Вас ОС Windows XP, в комплектацию которой не входит "Robocopy.exe", то только ради осуществления такого решения поставленной Вами задачи эту утилиту следует установить.

Eugene Shugaev 16-03-2014 16:23 2324355

Касательно OEM 866 либо notepad++ или far. Или любой dos-овский редактор

wonted 17-03-2014 06:54 2324661

Век живи век учись, о таком мощном интегрированном средстве даже не слышал.
Код:

                          54699863        \\192.168.8.10\public\‚ҐЎЁ**ал\ўҐЎЁ**а Џ„*\Rec-2010.12.21-11;44;59.mp3
                          60870052        \\192.168.8.10\public\‚ҐЎЁ**ал\ўҐЎЁ**а Џ„*\Rec-2010.12.21-13;52;59.mp3
                          125929472        \\192.168.8.10\public\ўбваҐз* б ¬Ё*-ў®¬ „Ћ«мЈ* ‚*«Ґамп*®ў** 15 *®пЎап12\€’ Їа.ppt
                          227021824        \\192.168.8.10\public\ўбваҐз* б ¬Ё*-ў®¬ „Ћ«мЈ* ‚*«Ґамп*®ў** 15 *®пЎап12\€’ Їа€’Ћѓ.ppt
                          212997632        \\192.168.8.10\public\ўбваҐз* б ¬Ё*-ў®¬ „Ћ«мЈ* ‚*«Ґамп*®ў** 15 *®пЎап12\ЏаҐ§Ґ*в*жЁп  Ї® Їа®дЁ«*ЄвЁЄҐ 2012 Ј®¤.ppt
                          187582976        \\192.168.8.10\public\ўбваҐз* б ¬Ё*-ў®¬ „Ћ«мЈ* ‚*«Ґамп*®ў** 15 *®пЎап12\ЏаҐ§Ґ*в*жЁп  Ї® Їа®дЁ«*ЄвЁЄҐ 55.ppt
                          60156416        \\192.168.8.10\public\„«п б*©в*\** б*©в.doc
                          943736832        \\192.168.8.10\public\Є Є«*бб*л¬ з*б*¬\ЌЂђЉЋ’€Љ€\б ¤ЁбЄ* 2\VIDEO_TS\VTS_01_1.VOB
                          83320832        \\192.168.8.10\public\Є Є«*бб*л¬ з*б*¬\ЌЂђЉЋ’€Љ€\бЎ®а*ЁЄ Їа®дЁ«*ЄвЁзҐбЄЁе ¬*вҐаЁ*«®ў “”‘ЉЌ ђ®ббЁЁ Ї® ‘ўҐа¤«®ўбЄ®© ®Ў«*бвЁ\*ЄжЁЁ, Є®*Єгабл\ѓ®а®¤бЄ®© Є®*Єгаб ˜Є®«* ЎҐ§ **аЄ®вЁЄ®ў.doc
                          99671670        \\192.168.8.10\public\Є Є«*бб*л¬ з*б*¬\ЌЂђЉЋ’€Љ€\бЎ®а*ЁЄ Їа®дЁ«*ЄвЁзҐбЄЁе ¬*вҐаЁ*«®ў “”‘ЉЌ ђ®ббЁЁ Ї® ‘ўҐа¤«®ўбЄ®© ®Ў«*бвЁ\ЏаЁЎ*Є*«мҐ Їа®вЁў **аЄ®вЁЄ®ў\2.avi
                          412748070        \\192.168.8.10\public\‹Ёз*лҐ Ї*ЇЄЁ\Ѓ*ЎгиЄЁ**\€‚‹…‚Ђ 8Ѓ\Ќ®ўл© Ј®¤ ў 34иЄ®«Ґ(8Ѓ).avi
                          60156416        \\192.168.8.10\public\‹Ёз*лҐ Ї*ЇЄЁ\Ѓ®аЁбоЄ\** б*©в.doc
                          57653090        \\192.168.8.10\public\‹Ёз*лҐ Ї*ЇЄЁ\Ѓ®айҐ*Є®ў\Љ*ЁЈЁ\‘®ўаҐ¬Ґ**л© га®Є б Ё*вҐа*ЄвЁў*®© ¤®бЄ®© Activ Board.pdf
                          62688688        \\192.168.8.10\public\‹Ёз*лҐ Ї*ЇЄЁ\Ѓ®айҐ*Є®ў\Љ*ЁЈЁ\¬®¤г«м**п бЁб⥬* PROLog Ё PROClass\proclass prolog\PROLog (H)\PPOLog_Setup_2.0.exe
                          119684984        \\192.168.8.10\public\‹Ёз*лҐ Ї*ЇЄЁ\Ѓ®айҐ*Є®ў\Ї«**л нў*Єг*жЁ©\Backup_of_˜Є®«* 34 Ўг«. Љ®¬б®¬®«мбЄЁ© - 8 ив..wmf
                          119684984        \\192.168.8.10\public\‹Ёз*лҐ Ї*ЇЄЁ\Ѓ®айҐ*Є®ў\Ї«**л нў*Єг*жЁ©\Backup_of_˜Є®«* 34 Ўг«. Љ®¬б®¬®«мбЄЁ© - 8 ив.5.wmf
                          99608576        \\192.168.8.10\public\‹Ёз*лҐ Ї*ЇЄЁ\‚*ᨫ쥢*\18 *®пЎап 3\01-ЏҐаў*п ўбваҐз* (2).avi
                          126421766        \\192.168.8.10\public\‹Ёз*лҐ Ї*ЇЄЁ\‚*ᨫ쥢*\18 *®пЎап 3\Њ*и* Ё ЊҐ¤ўҐ¤м 2.avi
                          60362240        \\192.168.8.10\public\‹Ёз*лҐ Ї*ЇЄЁ\‚*ᨫ쥢*\18 *®пЎап 3\ЏаҐ§Ґ*в*жЁп1 (3).ppt
                          70399798        \\192.168.8.10\public\‹Ёз*лҐ Ї*ЇЄЁ\‚*ᨫ쥢*\Є«*бб*лҐ з*бл\„Ґ*м-Ї®¦Ё«®Ј®-祫®ўҐЄ*-(1-®ЄвпЎап).mp4
                          80777728        \\192.168.8.10\public\‹Ёз*лҐ Ї*ЇЄЁ\ѓ«ге*ॢ*\ЂввҐбв*жЁп\Ђ**«ЁвЁзҐбЄЁ© ®взҐв.ppt
                          263368192        \\192.168.8.10\public\‹Ёз*лҐ Ї*ЇЄЁ\ѓ®ў®агеЁ**\ўлбвгЇ«Ґ*ЁҐ Ќ€.ppt
                          205720576        \\192.168.8.10\public\‹Ёз*лҐ Ї*ЇЄЁ\ѓ®ў®агеЁ**\® иЄ®«Ґ\*ЄЄаҐ¤Ёв*жЁп - Є®ЇЁп.ppt
                          205763584        \\192.168.8.10\public\‹Ёз*лҐ Ї*ЇЄЁ\ѓ®ў®агеЁ**\® иЄ®«Ґ\*ЄЄаҐ¤Ёв*жЁп.ppt
                          263368192        \\192.168.8.10\public\‹Ёз*лҐ Ї*ЇЄЁ\ѓ®ў®агеЁ**\® иЄ®«Ґ\ўлбвгЇ«Ґ*ЁҐ Ќ€.ppt
                          212984320        \\192.168.8.10\public\‹Ёз*лҐ Ї*ЇЄЁ\ѓ®ў®агеЁ**\® иЄ®«Ґ\ЏаҐ§Ґ*в*жЁп  Ї® Їа®дЁ«*ЄвЁЄҐ 2012 Ј®¤.ppt
                          111051264        \\192.168.8.10\public\‹Ёз*лҐ Ї*ЇЄЁ\ѓ®ў®агеЁ**\® иЄ®«Ґ\ђЂ„“ѓЂ 2013.ppt
                          1065353216        \\192.168.8.10\public\‹Ёз*лҐ Ї*ЇЄЁ\„Ґ*йЁЄ®ў*\‚€— 2013\ваЁ бҐбвал\VTS_01_1.VOB
                          168525824        \\192.168.8.10\public\‹Ёз*лҐ Ї*ЇЄЁ\„Ґ*йЁЄ®ў*\‚€— 2013\ваЁ бҐбвал\VTS_01_2.VOB

Цитата:

Цитата Eugene Shugaev
Касательно OEM 866 либо notepad++ или far. Или любой dos-овский редактор »

спасибо я разобрался, думал notepad++ сам распознает кодировку, но нет пришлось в ручную выбрать
Снова воспользуюсь нагло вашей помощью, как адаптировать условия поиска "по размеру" на по расширению т.е. проверить наличие фалов нескольких расширений jpg,gif, avi и пр. по идее нужно из фала подгружать несколько расширений?
Код:

@>poisk.txt robocopy "E:\Downloads" *.jpg *.avi /nc /ndl /njh /njs /l /s

Iska 17-03-2014 12:40 2324772

Цитата:

Цитата wonted
думал notepad++ сам распознает кодировку, но нет пришлось в ручную выбрать »

Редактор Far Manager'а умеет. И за исключением крайне редких случаев делает это правильно.

Georgio 17-03-2014 13:40 2324795

Цитата:

Цитата wonted
проверить наличие фалов нескольких расширений »

Да, Вы правильно поняли, только "фейковый" объект назначения (в моём коде -- "%random%") обязательно нужен, и, если не хотите выводить размер файлов, укажите параметр "/ns":
Код:

@>poisk.txt robocopy "E:\Downloads" %random% *.jpg *.avi /nc /ns /ndl /njh /njs /l /s
.


Время: 19:48.

Время: 19:48.
© OSzone.net 2001-