Войти

Показать полную графическую версию : [решено] Создание папки из части имени файла и перемещение в нее файлов содержащих эту часть


artbiokron@vk
14-03-2020, 17:08
Прощу помощи, в программировании не буб-бум...

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

Iska
14-03-2020, 17:41
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

artbiokron@vk
14-03-2020, 18:01
Благодарю.
да, код всегда пятизначный, всегда в начале имени, все в одном каталоге, все файлы имеют расширение «.jpg»

megaloman
14-03-2020, 22:51
код всегда пятизначный, всегда в начале имени, все в одном каталоге, все файлы имеют расширение «.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

DJ Mogarych
14-03-2020, 23:36
^[0-9][0-9][0-9][0-9][0-9] »
^\d{5}

megaloman
15-03-2020, 00:13
DJ Mogarych, ^\d{5} »
Похоже эта конструкция в findstr не работает, ни \d ни {5}

DJ Mogarych
15-03-2020, 07:33
Странная реализация регулярных выражений, в таком случае.

Iska
15-03-2020, 11:43
DJ Mogarych, не то слово ;).

artbiokron@vk
15-03-2020, 12:47
Решил вопрос следующим:
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-"

megaloman
15-03-2020, 13:49
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
Здесь оставлен контроль кода на наличие всех цыфирей. Если в коде всё что угодно - раскомментируйте красную строку

artbiokron@vk
17-03-2020, 10:32
Благодарю за ответы, дело в том что в описании я указал что есть файлы в которых после пятизначного кода через "-" (минус) идет цифровой индекс и есть ракурсы которые записаны буквами через нижнее подчеркивание "_". Я программировании не бум-бум =)) поэтому и описал что мне помог вот этот код, я нашел его тут на просторах форума и подогнал навзания своих файлов чтобы он работал =))) Решил вопрос следующим:
Код:Выделить весь код
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-"




© OSzone.net 2001-2012