Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление подстроки в переменной For R

Ответить
Настройки темы
CMD/BAT - [решено] Удаление подстроки в переменной For R

Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: nexochyka
Дата: 06-06-2017
Описание: Дополнение в теме
Доброго всем!
Проблема в следующем есть обработка по сжатию JPG файлов,
не обработанные файлы складируются в корневую директорию Int2Dir дополнительно могут создаваться произвольные поддиректории.
После сжатия файлы складируются в корневую директорию Rsz2Dir включая поддиректории созданные пользователем.
Проблема в извлечении имен поддиректорий для последующего их использования.
Кто подскажет где я туплю (без поддиректорий работает на ура).
ps: для сжатия используется nConvert от XnView (http://www.xnview.com/en/nconvert/)
эксплуатация на Windows x32,x64 (xp, 7, 10)

Код: Выделить весь код
echo off

Set Int2Dir="c:\NConvert\тест 1"
Set Rsz2Dir="c:\NConvert\тест 2"

::Обходим файлы
For /R %Int2Dir% %%I In (*.jpg) Do (

::Извлекаем имена дополнительных директорий
set mystr="%%~dpI"
set mystr="%mystr:%Int2Dir%=%"

::Сжимаем файлы
nconvert -ratio -rtype lanczos -rflag decr -rflag orient -resize 1920 1200 -o "%Rsz2Dir%\%mystr%\__r_%%" "%%~I"

::Удаляем обработанные файлы
DEL /F /S /Q /A "%%~I"
)

Отправлено: 09:36, 06-06-2017

 

Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Проблема в следующем (не важно - есть обработка по сжатию JPG файлов,) - поехали:

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

После сжатия файлы складируются в корневую директорию Rsz2Dir включая поддиректории созданные пользователем.
так в корневую или поддиректории или и туда и туда

Соответственно - Проблема в извлечении имен поддиректорий, так что именно брать за основу точки поиска?
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:38, 06-06-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вкратце Проблема в извлечении имен поддиректорий, точка отправления Int2Dir, файлы и в корне и в под директориях.

Детально Int2Dir неизменна, в ней пользователи создают произвольные директории с комбинацией цифр пробелов и русских символов (вариантов очень много, так что к ним привязываться нет смысла).
Далее обработанный файл включая созданную пользователем директорию (возможно и вложенную директорию, до 3х уровней вложения) нужно переместить в Rsz2Dir для дальнейших обработок.
Если файлы не классифицированы пользователь скинет их в корень Int2Dir без создания доп директорий.

Последний раз редактировалось nexochyka, 07-06-2017 в 08:41.


Отправлено: 19:53, 06-06-2017 | #3


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата nexochyka:
Проблема в извлечении ИМЕН поддиректорий »
Цитата nexochyka:
файлы и в корне и в под директориях »
это не совместимо логично

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

вот так будут выведены полные пути всех папок и подпапок директории "Int2Dir":
Код: Выделить весь код
@echo off
for /f "delims= eol=" %%a in ('2^>nul dir /ad/b/s "Int2Dir"') do echo %%a
pause
если убрать ключ /s - будут выводиться только имена папок, находящихся в анализируемой или текущей, если bat в ней, можно вместо имени директории поставить "%~1" и перетягивать нужную папку на bat, будете наблюдать на экране имена папок первого уровня этой директории

Да. Код сохранить в кодировке 866 (меньше проблем с русскими именами и путями)
И под
Цитата nexochyka:
файлы и в корне и в под директориях »
я так понимаю подразумеваются папки или же надо вывести имена еще и файлов, тогда определитесь точнее что вообще требуется и как эти имена будут использоваться в дальнейшем.

Последний раз редактировалось alpap, 07-06-2017 в 09:33.


Отправлено: 09:27, 07-06-2017 | #4


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Ну что ж...
Ваш пример ... крайне далек от поставленной задачи. И ваша фраза:
Цитата alpap:
(не важно - есть обработка по сжатию JPG файлов,) - »
говорит об отсутствии желания прочитать кусок рабочего кода и понять что именно нужно модернизировать.
С целью исключения детской переписки где каждый пытается показать себя грамотеем и предложить вариант из своей шкатулки я вставил кусок рабочего кода с фрагментом который необходимо модернизировать, о чем детально изложил.

Цитата nexochyka:
echo off
Set Int2Dir="c:\NConvert\тест 1"
Set Rsz2Dir="c:\NConvert\тест 2"
::Обходим файлы
For /R %Int2Dir% %%I In (*.jpg) Do (
::Извлекаем имена дополнительных директорий
set mystr="%%~dpI"
set mystr="%mystr:%Int2Dir%=%"

::Сжимаем файлы
nconvert -ratio -rtype lanczos -rflag decr -rflag orient -resize 1920 1200 -o "%Rsz2Dir%\%mystr%\__r_%%" "%%~I"
) »
Если бы стояла задача в тупую перебрать директории я бы использовал аналогичный вашему вариант, задача стоит в перемещении файлов по директориям (с учетом произвольных) рекурсивно (For /R).

Но все равно спасибо за проявленный интерес.
Проблема не решена.


Цитата alpap:
это не совместимо логично
теоретически можно вытащить именно имена, но во-первых может быть и совпадение, а даже если и нет, какой смысл наблюдать использовать имя одного и того же списка папки уровнями двумя ниже. »
Для понимания, это фото архив разных объектов и ситуаций сортируемый по дате создания снимка, объекту и ситуации.
В настоящий момент складирование осуществляется в единую папку (гггг/мм/дд) разделение осуществляется по имени файла (гмд_чмс_имяфайла_пользователь) на основании информации из exif, после чего недостающие директории создаются ручками.

Последний раз редактировалось nexochyka, 07-06-2017 в 13:16. Причина: Разьяснение


Отправлено: 12:23, 07-06-2017 | #5


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


nexochyka,
Рискую нарваться на Ваш праведный гнев :)
Код: Выделить весь код
@Echo OFF
cls

Set "BoxIn=Z:\Box_In\CMD"
Set "BoxOut=Z:\Box_Out\Kuku"
Set "Mask=*.js"

FOR /F "usebackq delims=" %%f IN (`Dir "%BoxIn%\%Mask%" /S /B /A:-D 2^>nul`) DO Call :Work "%%f" "%%~dpf"
GoTo :Eof

:Work
	Set "PathIn=%~2"
	Call Set "PathOut=%%PathIn:%BoxIn%=%BoxOut%%%"
	Echo %1
	Echo %PathIn%
	Echo %PathOut% 
pause
GoTo :Eof
Подозреваю, что еще необходимо выходную папку создать, что-то наманер
If Not Exist "%PathOut%" Md "%PathOut%"

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 07-06-2017 в 14:52.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:46, 07-06-2017 | #6


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman, благодарю, совсем забыл про необходимость выноса set из цикла for.

Отправлено: 21:21, 07-06-2017 | #7


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


nexochyka,
Цитата nexochyka:
совсем забыл про необходимость выноса set из цикла for.
Не обязательно
Код: Выделить весь код
@Echo OFF
cls

Set "BoxIn=Z:\Box_In\CMD"
Set "BoxOut=Z:\Box_Out\Kuku"
Set "Mask=*.js"

SetLocal EnableExtensions EnableDelayedExpansion

FOR /R "%BoxIn%" %%f IN ("%Mask%") DO (
	Set "FileIn=%%f"
	Set "PathIn=%%~dpf"

	Call Set "FileOut=%%FileIn:%BoxIn%=%BoxOut%%%"
	Call Set "PathOut=%%PathIn:%BoxIn%=%BoxOut%%%"

	Echo:
	Echo !FileIn!
	Echo !FileOut!

	Echo:
	Echo !PathIn!
	Echo !PathOut!
	Echo:

	Pause
)
GoTo :Eof

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 08-06-2017 в 11:55.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:49, 08-06-2017 | #8


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Можно по подробнее про:
SetLocal EnableExtensions EnableDelayedExpansion

Отправлено: 12:06, 08-06-2017 | #9


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


nexochyka, Читаем хелп после выполнения команды SetLocal /?
Можно посмотреть тут.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:22, 08-06-2017 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление подстроки в переменной For R

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Реализация функций длины переменной, выделение подстроки с параметрами в переменной. NiOl Скриптовые языки администрирования Windows 7 31-01-2019 19:58
CMD/BAT - [решено] Сравнение переменной цикла со строковой переменной NickM Скриптовые языки администрирования Windows 2 17-01-2017 10:28
VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту) pogo Скриптовые языки администрирования Windows 12 06-12-2013 17:59
CMD/BAT - [решено] В переменной содержится имя переменной opravdin Скриптовые языки администрирования Windows 3 28-01-2013 11:11
CMD/BAT - [решено] Удаление строк в файле, начинающихся с переменной 2ooth Скриптовые языки администрирования Windows 3 31-08-2011 13:44




 
Переход