|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Перемещение файлов в папку, названную частью имени этого файла |
|
CMD/BAT - [решено] Перемещение файлов в папку, названную частью имени этого файла
|
Новый участник Сообщения: 8 |
Профиль | Отправить PM | Цитировать Здравствуйте, господа.
Есть много файлов с форматом имени: DD-MM-YYYY_hh-mm-ss_in_out.mp3 Например: 17-12-2018_16-20-48_2000_3000.mp3 18-12-2018_10-26-31_1000_88005553535.mp3 Отличаться по количеству символов может только последний номер("out"). Нужно создать папку с именем, совпадающим с "in" и переместить в неё все файлы, у которых "in" совпадает с именем папки. То есть, взять "17-12-2018_16-20-48_2000_3000.mp3", создать папку "2000" и переместить в него этот файл. Взять "18-12-2018_10-26-31_1000_88005553535.mp3", создать папку "1000" и переместить этот файл в созданную или уже существующую папку. Нужно пропускать первые 20 символов и, начиная с 21-го, брать 4 символа и создавать папку с таким именем, а затем перемещать файл. Каким образом это можно реализовать? Может лучше создание папки и перемещение файла разбить на два скрипта? Спасибо. |
|
Отправлено: 10:38, 18-12-2018 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать
как обычно открыт вопрос что делать если будут иметь место файлы с одинаковым названием, но учитывая, что вроде как они вообще все в одной папке свалены, проблем возникнуть не должно.
|
Отправлено: 11:41, 18-12-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Здесь и здесь:
Цитата:
Попробуйте так (на WSH): Скрытый текст
Option Explicit Dim strSourceFolder Dim objFSO Dim objFile Dim strDestFolder If WScript.Arguments.Count = 1 Then Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") strSourceFolder = objFSO.GetAbsolutePathName(WScript.Arguments.Item(0)) If objFSO.FolderExists(strSourceFolder) Then With WScript.CreateObject("VBScript.RegExp") .Pattern = "^\d{2}-\d{2}-\d{4}_\d{2}-\d{2}-\d{2}_(\d+)_\d+\.mp3$" .IgnoreCase = True For Each objFile In objFSO.GetFolder(strSourceFolder).Files If .Test(objFile.Name) Then strDestFolder = objFSO.BuildPath(strSourceFolder, .Execute(objFile.Name).Item(0).Submatches.Item(0)) If Not objFSO.FolderExists(strDestFolder) Then objFSO.CreateFolder strDestFolder End If objFile.Move strDestFolder & "\" End If Next End With Else WScript.Echo "Can't find source folder [" & strSourceFolder & "]." WScript.Quit 2 End If Set objFSO = Nothing Else WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>" WScript.Quit 1 End If WScript.Quit 0 Путь к исходному каталогу указывается аргументом скрипта (также можно просто перетащить папку на скрипт в Проводнике). |
|
Отправлено: 11:49, 18-12-2018 | #3 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Спасибо!
Вроде бы всё работает. С названиями проблем возникнуть не должно. Я пытался сделать что-то вроде этого: @ECHO ON SETLOCAL SET "sourcedir=D:\tst" PUSHD %sourcedir% FOR /f "tokens=3 delims=_" %%a IN ( 'dir /b /a-d "*_*_*_*.*"' ) DO ( MD %%a 2>nul MOVE "%%a_%%b_%%c_%%d" .\%%a\ >nul ) POPD GOTO :EOF И да, будут только цифры, в предпоследней части исключительно 4х-значные цифры. |
Отправлено: 11:53, 18-12-2018 | #4 |
Ветеран Сообщения: 2723
|
Профиль | Отправить PM | Цитировать Numufar, До кучи еще вариант
@Echo Off Set "BoxIn=Z:\Box_In" Set "BoxOut=Z:\Box_Out" FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /B /A:-D "%BoxIn%\??-??-20??_??-??-??_*_*.mp3"`) DO ( FOR /F "tokens=7 delims=-_" %%i IN ("%%f") DO ( If Not Exist "%BoxOut%\%%i" Md "%BoxOut%\%%i" Move "%BoxIn%\%%f" "%BoxOut%\%%i\" >nul ) ) Если батник, файлы, создаваемые папки находятся в одной общей папке
Если BoxIn и BoxOut совпадают, также можно просто перетащить папку на скрипт в Проводнике
@Echo Off If "%1"=="" Exit /B 1 Set "BoxIn=%~1" Set "BoxOut=%~1" FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /B /A:-D "%BoxIn%\??-??-20??_??-??-??_*_*.mp3"`) DO ( FOR /F "tokens=7 delims=-_" %%i IN ("%%f") DO ( If Not Exist "%BoxOut%\%%i" Md "%BoxOut%\%%i" Move "%BoxIn%\%%f" "%BoxOut%\%%i\" >nul ) ) |
|
------- Последний раз редактировалось megaloman, 18-12-2018 в 16:51. Отправлено: 12:26, 18-12-2018 | #5 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Способ megaloman понравился больше всего, спасибо всем!) Один из немногих форумов, где реально помогают, а не пытаются самоутвердиться за счёт чужого незнания.
|
Отправлено: 12:46, 18-12-2018 | #6 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Создание папки по имени файла и перемещение файла в эту папку. | lovator | Скриптовые языки администрирования Windows | 20 | 30-03-2024 13:55 | |
Любой язык - [решено] Скрипт который раскидывает файлы по папкам, с частью имени этих файлов | username-qq | Скриптовые языки администрирования Windows | 6 | 06-10-2018 18:30 | |
CMD/BAT - перемещение файлов в каталог созданный из части имени файла | surrender1 | Скриптовые языки администрирования Windows | 9 | 10-10-2013 14:42 | |
CMD/BAT - [решено] Запуск bat-файла от имени админа.Как сделать каталог этого bat-файла текущим?? | axmed0207 | Скриптовые языки администрирования Windows | 1 | 19-01-2012 06:14 | |
CMD/BAT - [решено] Перемещение файлов из одной папки в разные в зависимости от имени файла | Sarge81 | Скриптовые языки администрирования Windows | 4 | 20-09-2011 04:20 |
|