Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
vavun
9866 / 5235 / 802
Регистрация: 07.04.2013
Сообщений: 15,192
1

Применить сжатие файлов по расширению

06.09.2015, 17:28. Просмотров 1006. Ответов 27
Метки нет (Все метки)

Приветстую

К примеру есть кусок скрипта

Windows Batch file
1
for %%A in (D:\TMP) do (if exist "%%~A" (for %%A in ("%%~A\*.png") do (compact /c "%%~A")))

Знаю, что можно намного проще, но я пытаюсь сделать так, чтобы обрабатывало *.png и *.jpg + иметь на будущее универсальный шаблон для обработки файлов по нескольким расширеням.


for %%A in ("%%~A\*.png %%~A\*.png") и прочие вариации не работают.
Пытался найти ответ тут Циклические операции и примеры (команда FOR) * [Статья]
Или не нашел, или не понял

Как применить сжатие к *.png и *.jpg одновременно ?

Заранее спасибо

Добавлено через 19 минут
Собственно, главный вопрос снят.

Вариант
Windows Batch file
for %%A in (D:\TMP) do (if exist "%%~A" (for %%A in ("%%~A\*.png" "%%~A\*.jpg") do (compact /c "%%~A")))
Работает (видимо упустил)

Как можно упросить ?
Где и чего я лишнего нагородил ? )
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2015, 17:28
Ответы с готовыми решениями:

Распределение файлов по их расширению
Всем привет!) Спасайте!! Нужно создать батник который распределяет разные файлы...

Сортировка файлов по расширению
Здравствуйте, уважаемые пользователи, появилась проблема с написанием bat...

Перемещение файлов по расширению
Доброго времени суток. Очень нужна Ваша помощь. Требуется создать bat-ник,...

Сортировка имен файлов по расширению
Здравствуйте! Помогите, не могу решить задачку: Создать командный файл...

Мониторинг файлов по дате создания и расширению
Здравствуйте, есть задача мониторить папку на предмет наличия файлов с...

27
Garry Galler
1824 / 1385 / 528
Регистрация: 28.10.2013
Сообщений: 3,532
06.09.2015, 22:38 21
Как вариант - список каталогов можно поместить в файл. Тогда можно указывать в этом файле любое число папок (построчно) с пробелами и без (и никакие кавычки не требуются).
Windows Batch file
1
2
3
4
5
6
7
cd /d %~dp0
call :SORTFILES folders.txt "*.jpg *.png"
pause
exit /b
:SORTFILES
for /f "delims=" %%d in ('type %1') do (cd /d %%d 2>nul && for %%i in (%~2)  do echo "%%d\%%i")
goto :eof
0
vavun
9866 / 5235 / 802
Регистрация: 07.04.2013
Сообщений: 15,192
06.09.2015, 22:40  [ТС] 22
Garry Galler, можно, но я стараюсь так не делать, если есть возможность без этого обойтись.
0
alpap
1806 / 1327 / 430
Регистрация: 26.04.2015
Сообщений: 4,538
06.09.2015, 22:55 23
Garry Galler, По части кавычек, все-таки бы, на всяк случай
Windows Batch file
1
cd /d "%~dp0"
и что-то я не догоняю строку 2:
Windows Batch file
1
call :SORTFILES folders.txt "*.jpg *.png"
1
Garry Galler
1824 / 1385 / 528
Регистрация: 28.10.2013
Сообщений: 3,532
06.09.2015, 23:15 24
alpap,
Первая строка не является такой уж обязательной (тому, кто будет использовать код она может вообще не понадобится, так как путь к файлу со списком можно указать и полностью), а в моем коде кавычки не требовались (путь к батнику не имеет пробелов).
Что касается второй строки, то использование call это вариант vavun, - способ передачи аргументов в основной код (на метку :SORTFILES). Выглядит более элегантно и структурировано, нежели просто кусок кода.
0
alpap
1806 / 1327 / 430
Регистрация: 26.04.2015
Сообщений: 4,538
07.09.2015, 19:38 25
Garry Galler, Ну да, или первая строка не надо или уже переход cd /d %%d - лишний, раз мы в нужной папке.
0
Garry Galler
1824 / 1385 / 528
Регистрация: 28.10.2013
Сообщений: 3,532
08.09.2015, 01:18 26
vavun,
Вот такой фокус можно применить, чтобы заставить cmd правильно распарсить список каталогов (пробелы допускаются) и передать их цикл в виде строк, обрамленных кавычками ("d:\tmp" "d:\tmp 1" "d:\tmp2")
Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
cd /d "%~dp0"
  call :SORTFILES "d:\tmp;d:\tmp 1;d:\tmp2" "*.jpg *.png"
    pause
exit /b
:SORTFILES
  set temp=%~1
   for %%d in ("%temp:;=" "%") do (cd /d %%d 2>nul && for %%i in (%~2)  do echo "%%~d\%%i")
goto :eof
Еще бы избавиться от переменной temp... но это уже не мой уровень.
Логика взята отсюда: Разбиение строки по разделителю (по аналогии Split ) на неограниченное число подстрок (без использования токенов)
1
sov44
1760 / 744 / 128
Регистрация: 09.04.2011
Сообщений: 1,314
08.09.2015, 11:40 27
Цитата Сообщение от Garry Galler Посмотреть сообщение
set temp=%~1
Не нужно так. Зачем сбивать системные переменные? У меня к примеру TEMP=c:\Windows\temp, а после применения кода может стать TEMP="d:\tmp;d:\tmp 1;d:\tmp2"

upd. Если конечно не стоит перед присвоением setlocal
0
Garry Galler
1824 / 1385 / 528
Регистрация: 28.10.2013
Сообщений: 3,532
08.09.2015, 12:04 28
sov44,
Название переменной,конечно, можно изменить на что-то более несистемное (специально я его не подбирал), но в данном случае эта переменная не оказывает никакого влияния на системную переменную TEMP, ибо существует только в одной конкретной запущенной сессии интерпретатора cmd и не может (так как set != setx) изменить значение переменной в реестре.
после применения кода может стать TEMP="d:\tmp;d:\tmp 1;d:\tmp2"
Повторю:только в одной конкретной запущенной сессии интерпретатора cmd и не дольше чем длится эта самая сессия.
Для всех программ переменная не изменится, ибо они юзают не локальную копию, а глобальную.
0
08.09.2015, 12:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2015, 12:04

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

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

Выборка файлов по расширению, упаковка, отправка адресатам, ведение лога, резервное копирование
Всем привет Сделал следующий батник Он ищет в папке файлы aaa0000bbb*.CNG,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru