NuclearBox |
10-02-2021 22:03 2949632 |
Перемещение файлов в папки, названные по части имен файлов
Здравствуйте.
Помогите написать батник для перемещения файлов в папки, которым присваивается имя, соответствующее первым 10 символам имен файлов.
В директории масса файлов, имя которых начинается с дат в одинаковом формате вида 2021-01-01-??????????.???
Необходим батник, который будет создавать папки, имена которых соответствуют первым 10 символам имен файлов (как 2021-01-01), и перемещать в эти папки соответствующие файлы.
|
Код:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "usebackq delims=" %%i in (
`2^>nul dir /b /a:-d "*.*" ^| findstr.exe /r /c:"^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-.*\..*$"`
) do (
set sName=%%~nxi
set sDate=!sName:~0,10!
2>nul md "!sDate!"
>nul move "%%~fi" ".\!sDate!\"
)
endlocal
exit /b 0
|
NuclearBox |
11-02-2021 01:07 2949656 |
Iska, спасибо! С фильтром через регулярные выражения работает отлично.
|
Код:
@echo off
for /f "tokens=1-3* delims=-" %%a in ('dir /a-d/b "????-??-??-*"') do (
if not exist "%%a-%%b-%%c" md "%%a-%%b-%%c"
>nul move "%%a-%%b-%%c-%%d" "%%a-%%b-%%c"
)
pause
|
Можно соединить идею Iska и alpap, а в Move написать перемещение не по файлу, а группой за дату (ИМХО, сработает быстрее)
Код:
@Echo Off
cls
Set "BoxIn=Z:\Box_In"
For /f "usebackq tokens=1-3* delims=-" %%i In (
`2^>nul Dir /A:-D /B "%BoxIn%\????-??-??-*.*"^| findstr.exe /B /R /C:"^[0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]-"`) Do (
If Exist "%BoxIn%\%%i-%%j-%%k-%%l" (
2>nul Md "%BoxIn%\%%i-%%j-%%k"
>NUL Move /Y "%BoxIn%\%%i-%%j-%%k-*.*" "%BoxIn%\%%i-%%j-%%k\"
)
)
Pause
Exit /B 0
Хотя, ИМХО, от findstr (выделено красным) можно и вовсе отказаться с незначительным ухудшением контроля имен, но с меньшим временем выполнения, хотя всё это для разовой задачи несущественно, раз она решена.
|
NuclearBox |
13-02-2021 16:26 2949942 |
alpap, megaloman, спасибо за интересные варианты!
|
Время: 13:02.
© OSzone.net 2001-