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

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

Ответить
Настройки темы
CMD/BAT - [решено] Создание папки из части имени файла и перемещение в нее файлов содержащих эту часть

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


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

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


Прощу помощи, в программировании не буб-бум...

Проблема есть папка с тысячами фотографиями изделий в нескольких ракурсах, название фалов содержат пятизначный код изделия и ракурс (пример 02586.jpg 02586-2.jpg 02586_up.jpg 02586_d.jpg и т.д.) Необходимо создать папку из первых 5 цифр (код) и переместить туда все фото содержащие этот код.

Отправлено: 17:08, 14-03-2020

 

Ветеран


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

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


artbiokron@vk, код всегда пятизначный, состоит только из цифр и всегда находится в начале имени файла? Все файлы в одном каталоге, или есть и вложенные подкаталоги? Все файлы имеют расширение «.jpg»?

Если всё так — пробуйте:
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=C:\Мои проекты\0305

pushd "%sSourceFolder%" && (
	for /f "usebackq delims=" %%i in (`2^>nul dir /b /a:-d "*.jpg" ^| findstr.exe /r /b /e /c:"[0-9][0-9][0-9][0-9][0-9].*[.]jpg"`) do (
		set sVar=%%~ni
		set sNewFolderName=!sVar:~0,5!
		if not exist "!sNewFolderName!\." md "!sNewFolderName!"
		>nul move "%%~i" "!sNewFolderName!\%%~i"
	)
	popd
) || (
	echo Can't find source folder [%sSourceFolder%].
	exit /b 1
)

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

Отправлено: 17:41, 14-03-2020 | #2



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

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


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


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

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


Благодарю.
да, код всегда пятизначный, всегда в начале имени, все в одном каталоге, все файлы имеют расширение «.jpg»

Отправлено: 18:01, 14-03-2020 | #3


Ветеран


Contributor


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

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


Цитата artbiokron@vk:
код всегда пятизначный, всегда в начале имени, все в одном каталоге, все файлы имеют расширение «.jpg» »
То же, что у Iska, но без setlocal enableextensions enabledelayedexpansion и немного изменил регулярку
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Box_In"
	Set "BoxOut=Z:\Box_Out"
	Set "Ext=jpg"
	Set "RMask=^[0-9][0-9][0-9][0-9][0-9].*\.%Ext%$"
	Set /A N=5

	Pushd "%BoxIn%" ||(Echo Folder "%BoxIn%" not found &Pause &Exit /b 2)
	FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /B /A:-D "*.%Ext%" ^|FINDSTR /I /X /R /C:"%RMask%"`) DO (
		Set "Name=%%f"
		2>nul Call MD "%BoxOut%\%%Name:~0,%N%%%"
		Call Move /Y "%%f" "%BoxOut%\%%Name:~0,%N%%%\" >nul
	)
	Popd
Pause
Exit /B 0

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


Последний раз редактировалось megaloman, 14-03-2020 в 23:09.

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

Отправлено: 22:51, 14-03-2020 | #4


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Цитата megaloman:
^[0-9][0-9][0-9][0-9][0-9] »
Код: Выделить весь код
^\d{5}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

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

Отправлено: 23:36, 14-03-2020 | #5


Ветеран


Contributor


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

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


DJ Mogarych,
Цитата DJ Mogarych:
^\d{5} »
Похоже эта конструкция в findstr не работает, ни \d ни {5}

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

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

Отправлено: 00:13, 15-03-2020 | #6


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Странная реализация регулярных выражений, в таком случае.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 07:33, 15-03-2020 | #7


Ветеран


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

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


DJ Mogarych, не то слово .

Отправлено: 11:43, 15-03-2020 | #8


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


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

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


Решил вопрос следующим:
Код: Выделить весь код
Set "BoxIn=C:\00_TEMP_LR\_2400"
Set "Mask=P_*.jpg"
Set /A NN=5

Set "BoxOut=C:\00_TEMP_LR\_2400"

FOR /F "usebackq tokens=1,2 delims=_" %%i IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D`) DO Call :MoveNN "%%i" "%%j" "%BoxIn%" "%BoxOut%" %NN%
GoTo :Eof

:MoveNN
	If Not Exist "%~3\%~1_%~2" GoTo :Eof
	Set "NewDir=%~2"
	Call Set "NewDir1=%%NewDir:~0,%5%%"
	Set "NewDir=%~4\%NewDir1%"
	If Not Exist "%NewDir%" Md "%NewDir%" >nul 2>&1
	Move "%~3\%~1_%NewDir1%*%~x2" "%NewDir%\" >nul 2>&1
GoTo :Eof
пришлось переименовать файлы, чтобы они не содержали "_" и добавив префикс "P-"

Отправлено: 12:47, 15-03-2020 | #9


Ветеран


Contributor


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

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


artbiokron@vk, Как-то Вы на лету успеваете постановку изменить.
Цитата artbiokron@vk:
пришлось переименовать файлы, чтобы они не содержали "_" и добавив префикс "P-" »
Расшифруйте, какой был файл, как Вы его переименовали, в какую папку переместили (какая-то путаница у Вас с символами "_" и "-")
Вот вариант с префиксом и групповым переносом файлов (будет работать быстрее).
Код: Выделить весь код
@Echo Off
cls
	Set  "BoxIn=Z:\Soft_In"
	Set "BoxOut=Z:\Soft_In"

	Set "Prefix=P_"
	Set "Ext=jpg"

	Set "RMask=^%Prefix%[0-9][0-9][0-9][0-9][0-9].*\.%Ext%$"
rem	Set "RMask=^%Prefix%......*\.%Ext%$"
	Set "N=2,5"

	Pushd "%BoxIn%" ||(Echo Folder "%BoxIn%" not found &Pause &Exit /b 2)
	FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /B /A:-D "%Prefix%*.%Ext%" ^|FINDSTR /I /X /R /C:"%RMask%"`) DO (
		If Exist "%%f" (
			Set "Name=%%~nf"
			2>nul Call MD "%BoxOut%\%Prefix%%%Name:~%N%%%"
			 >nul Call Move /Y "%Prefix%%%Name:~%N%%%*%%~xf" "%BoxOut%\%Prefix%%%Name:~%N%%%\"
		)
	)
	Popd
Pause
Exit /B 0
Здесь оставлен контроль кода на наличие всех цыфирей. Если в коде всё что угодно - раскомментируйте красную строку

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


Последний раз редактировалось megaloman, 15-03-2020 в 13:58.

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

Отправлено: 13:49, 15-03-2020 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Создание папки по имени файла и перемещение файла в эту папку. lovator Скриптовые языки администрирования Windows 20 30-03-2024 13:55
Любой язык - [решено] Создание папок по имени и перемещение файлов xan08 Скриптовые языки администрирования Windows 19 06-07-2019 12:11
CMD/BAT - [решено] Создание папок исходя из дат создания файлов и перемещение их в эти папки mezzin Скриптовые языки администрирования Windows 13 25-01-2018 18:38
CMD/BAT - перемещение файлов в каталог созданный из части имени файла surrender1 Скриптовые языки администрирования Windows 9 10-10-2013 14:42
CMD/BAT - [решено] Перемещение файлов из одной папки в разные в зависимости от имени файла Sarge81 Скриптовые языки администрирования Windows 4 20-09-2011 04:20




 
Переход