Показать полную графическую версию : [решено] Поместить каждый файл в одноименную папку.
Metallor
12-03-2016, 00:41
Здравствуйте, помогите пожалуйста в решении следующей проблемы:
В папке находятся файлы
First.mp3
Second.mp3
Third.mp3
Fourth.mp3
Необходимо для каждого файла создать папку с именем как у файла и переместить каждый файл внутрь одноименной папки.
First\First.mp3
Second\Second.mp3
Third\Third.mp3
Fourth\Fourth.mp3
megaloman
12-03-2016, 00:55
Если батник запускать в папке, где находятся файлы, то @echo off
FOR /F "usebackq delims=" %%d IN (`Dir "*.mp3" /b /A:-D 2^>nul`) DO (
md "%%~nd"
move /Y "%%d" "%%~nd\"
)
Либо@echo off
FOR %%f IN (*.mp3) DO md "%%~nf" & move /Y "%%f" "%%~nf\"
Либо из командной строки, например, файл-менеджера FAR
FOR %f IN (*.mp3) DO md "%~nf" & move /Y "%f" "%~nf\"
Metallor
12-03-2016, 01:10
Спасибо большое. Второй вариант подошел.
athlonix4@twitter
17-03-2022, 20:43
мне нужно тже самое но только у меня файлы имеют имена:
First_2021-10-22.ts
First_2020-01-18.mp4
Third_2016-02-02.flv
Third_2019-04-05.avi
и т.д.
нужно что бы все файлы с именем в начале "First" перенеслись в папку "First", тоесть куча файлов с разными датами в имени слились в одну папку, и расширения у них разные, но в основном видеоформат.
megaloman
17-03-2022, 22:26
@Echo Off
cls
Set "BoxIn=Z:\Box_In"
FOR /F "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D "%BoxIn%\*_20??-??-??.*"`) DO If Exist "%BoxIn%\%%f" (
Set "Name=%%~nf"
Call Echo %%Name%%|>nul 2>&1 FindStr/I /R /C:"^.*_20[0-9][0-9]-[0-1][0-9]-[0-3][0-9]$"&& (
Call Set "Name=%%Name:~0,-11%%"
Call 2>nul Md "%BoxIn%\%%Name%%"
Call >nul Move /Y "%BoxIn%\%%Name%%_20??-??-??.*" "%BoxIn%\%%Name%%\"
))
Pause
Exit /B@Echo Off
cls
Set "BoxIn=Z:\Box_In"
FOR /F "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D "%BoxIn%\*_20??-??-??.*"`) DO If Exist "%BoxIn%\%%f" (
Set "Name=%%~nf"
Call Set "Name=%%Name:~0,-11%%"
Call 2>nul Md "%BoxIn%\%%Name%%"
Call >nul Move /Y "%BoxIn%\%%Name%%_20??-??-??.*" "%BoxIn%\%%Name%%\"
)
Pause
Exit /B
athlonix4@twitter
19-03-2022, 17:19
megaloman »
че то не работает, ничего не происходит
athlonix4@twitter
19-03-2022, 19:59
athlonix4@twitter, вы свой путь прописали вместо моего?
Set "BoxIn=Z:\Box_In"
Имя файла указали правильно? »
наверное немного недопонимание возникло, у меня как бы имен файлов разных около 1000, все они имеют разное колличество с датами, поэтому хотелось бы без указания.
megaloman
19-03-2022, 21:02
athlonix4@twitter, Виноват, Вы должны указать путь папки, где содержатся эти файлы
Вот еще вариант:@Echo Off
cls
Set "BoxIn=Z:\Box_In"
If Not "%~1"=="" Set "BoxIn=%~1"
If "%BoxIn:~-1%"=="\" Set "BoxIn=%BoxIn:~0,-1%
FOR /F "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D "%BoxIn%\*_20??-??-??.*"`) DO If Exist "%BoxIn%\%%f" (
Set "Name=%%~nf"
Call Set "Name=%%Name:~0,-11%%"
Call 2>nul Md "%BoxIn%\%%Name%%"
Call >nul Move /Y "%BoxIn%\%%Name%%_20??-??-??.*" "%BoxIn%\%%Name%%\"
)
Pause
Exit /B
Сохраните где-нибудь батник, на рабочем столе создайте на него иконку и в проводнике затаскивайте на нее обрабатываемую папку.
Можете просто запускать батник, но при этом путь к папке возьмется из батника.
Если поместить батник в обрабатываемую папку и запускать оттуда, то:
Set "BoxIn=%~dp0"
athlonix4@twitter
19-03-2022, 21:38
megaloman »
спасибо огромное, все работает, если можно еще один нюанс, оказалось что есть файлы и с таким форматом имени:
Nikolay_2021-08-26_22-23-36_0001.ts
Nikolay_2022-01-21_21-23-25-proxy.ts
Nikolay_2022-01-21_21-23-25_deleted.ts
как быть с этим? редактировать батник под свой формат, я попытался, но что то пошло не так, или есть универсальный способ?
megaloman
19-03-2022, 21:57
athlonix4@twitter, "Nikolay" - как я понимаю, имя произвольное. Оно может содержать знак "_" ? Кстати, этот вопрос относится и к предыдущим файлам.
megaloman
19-03-2022, 22:49
athlonix4@twitter, @Echo Off
cls
Set "BoxIn=Z:\Box_In"
rem Set "BoxIn=%~dp0"
If Not "%~1"=="" Set "BoxIn=%~1"
If "%BoxIn:~-1%"=="\" Set "BoxIn=%BoxIn:~0,-1%
FOR /F "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D "%BoxIn%\*_20??-??-??*.*"`) DO If Exist "%BoxIn%\%%f" (
Set "NN=%%~nf"
Call :MyMove "%%f" "_20%%NN:*_20=%%"
)
Pause
Exit /B
:MyMove
Set "Name=%~n1"
Call Set "Name=%%Name:%~2=%%"
2>nul Md "%BoxIn%\%Name%"
>nul Move /Y "%BoxIn%\%Name%_20??-??-??*.*" "%BoxIn%\%Name%\"
Exit /B Батник будет работать корректно, если внутри имени, например, Nikolay, нет сочетания _20, например Niko_20lay
athlonix4@twitter
20-03-2022, 00:59
Цитата megaloman:
athlonix4@twitter, "Nikolay" - как я понимаю, имя произвольное. Оно может содержать знак "_" ? Кстати, этот вопрос относится и к предыдущим файлам. »
да, "Nikolay" для примера, оно может быть любым, и оно тоже может содержать знак "_", например "_eva_ava_2021-02-07_22-13-27_0002.ts", имя папки должно быть, "_eva_ava", то есть имя папки это все что перед "_20??..." и т.д.
Цитата megaloman:
Батник будет работать корректно, если внутри имени, например, Nikolay, нет сочетания _20, например Niko_20lay »
протестил на небольшом количестве файлов все ок, спасибо. завтра на основной папке попробую.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC