mrusklon
@mrusklon
Не получается? Яростно гугли!

Как добавить в цикл поиска несколько названий?

есть такой вот скриптец
set t=E:\log.txt
set c=E:\ff
:: на каких дисках искать
dir /b /s a:\>%t%
dir /b /s b:\>>%t%
dir /b /s c:\>>%t%
dir /b /s d:\>>%t%
dir /b /s e:\>>%t%
dir /b /s f:\>>%t%
dir /b /s g:\>>%t%
rem ................
dir /b /s y:\>>%t%
dir /b /s z:\>>%t%
md %c%\
:: удалить все существующие файлы из папки куда будут складыватся новые файлы
del /F /Q "%c%\*.*" 2>nul
For /F "Delims=" %%I in ('^<"%t%" find /i ".jpg"') do copy "%%I" "%c%\"
:: удалить лог файл
del /F /Q "%t%" 2>nul
pause


он создает log.txt файл со списком всех файлов которые есть в указанном месте , далее ищет по списку файлы .jpg и все копирует в указанную папку.
У меня возникло как минимум 2 проблемы как задать несколько расширений файлов для выборки в цикле и как исключить из поиска папки типа windows, program files и их подпапки .. а еще бы хорошо не копировать файлы которые меньше чем Y кб.

Подскажите как делать? Я сперва добавил еще один цикл который искал уже по другому расширению файла но понял что вариаций расширений файлов много и запускать 5+ циклов глупая затея которая затянится по времени надолго

может есть проще вариант и я зря пишу все это? Как говорится зачем изобретать велосипед ?
  • Вопрос задан
  • 126 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
Фильтровать лучше не в for, а непосредственно в dir:
dir /b /s z:\*.jpg z:\*.png >>%t%
И ваш for преобразовывается в такой вид
For /F "usebackq Delims=" %%I in ("%t%") do copy "%%I" "%c%\"


Альтернативный вариант:
Я бы все сделал на xcopy. Изучите ее ключи: xcopy /?
Это достаточно мощная команда, по моему, несколько ее вызовов может заменить весь ваш скрипт.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы