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

Аватара пользователя
artbiokron@vk

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

Сообщение artbiokron@vk »

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



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

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

Сообщение Iska »

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



Если всё так — пробуйте:



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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
Аватара пользователя
artbiokron@vk

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

Сообщение artbiokron@vk »

Благодарю за ответы, дело в том что в описании я указал что есть файлы в которых после пятизначного кода через "-" (минус) идет цифровой индекс и есть ракурсы которые записаны буквами через нижнее подчеркивание "_". Я программировании не бум-бум Изображение) поэтому и описал что мне помог вот этот код, я нашел его тут на просторах форума и подогнал навзания своих файлов чтобы он работал Изображение))
Цитата:



Решил вопрос следующим:

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

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-"
Аватара пользователя
artbiokron@vk

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

Сообщение artbiokron@vk »

Цитата artbiokron@vk:



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




То же, что у 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
Аватара пользователя
Iska

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

Сообщение Iska »

artbiokron@vk, Как-то Вы на лету успеваете постановку изменить.
Цитата artbiokron@vk:



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




Расшифруйте, какой был файл, как Вы его переименовали, в какую папку переместили (какая-то путаница у Вас с символами "_" и "-")


Вот вариант с префиксом и групповым переносом файлов (будет работать быстрее).

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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

Здесь оставлен контроль кода на наличие всех цыфирей. Если в коде всё что угодно - раскомментируйте красную строку
Ответить

Вернуться в «Скриптовые языки администрирования Windows»