|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Создание папки из части имени файла и перемещение в нее файлов содержащих эту часть |
|
|
CMD/BAT - [решено] Создание папки из части имени файла и перемещение в нее файлов содержащих эту часть
|
Новый участник Сообщения: 8 |
Профиль | Сайт | Отправить PM | Цитировать Прощу помощи, в программировании не буб-бум...
Проблема есть папка с тысячами фотографиями изделий в нескольких ракурсах, название фалов содержат пятизначный код изделия и ракурс (пример 02586.jpg 02586-2.jpg 02586_up.jpg 02586_d.jpg и т.д.) Необходимо создать папку из первых 5 цифр (код) и переместить туда все фото содержащие этот код. |
|
Отправлено: 17:08, 14-03-2020 |
Ветеран Сообщения: 27449
|
Профиль | Отправить 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
|
Профиль | Сайт | Отправить PM | Цитировать Благодарю.
да, код всегда пятизначный, всегда в начале имени, все в одном каталоге, все файлы имеют расширение «.jpg» |
Отправлено: 18:01, 14-03-2020 | #3 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать Цитата artbiokron@vk:
@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 |
fascinating rhythm Сообщения: 6614
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
||
------- Отправлено: 23:36, 14-03-2020 | #5 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать DJ Mogarych,
Цитата DJ Mogarych:
|
|
------- Отправлено: 00:13, 15-03-2020 | #6 |
fascinating rhythm Сообщения: 6614
|
Профиль | Отправить PM | Цитировать Странная реализация регулярных выражений, в таком случае.
|
------- Отправлено: 07:33, 15-03-2020 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать DJ Mogarych, не то слово .
|
Отправлено: 11:43, 15-03-2020 | #8 |
Новый участник Сообщения: 8
|
Профиль | Сайт | Отправить 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 |
Отправлено: 12:47, 15-03-2020 | #9 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать artbiokron@vk, Как-то Вы на лету успеваете постановку изменить.
Цитата artbiokron@vk:
Вот вариант с префиксом и групповым переносом файлов (будет работать быстрее).
@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 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|