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+ циклов глупая затея которая затянится по времени надолго

может есть проще вариант и я зря пишу все это? Как говорится зачем изобретать велосипед ?
  • Вопрос задан
  • 97 просмотров
Решения вопроса 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 /?
Это достаточно мощная команда, по моему, несколько ее вызовов может заменить весь ваш скрипт.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы