Показать полную графическую версию : [решено] Перемещение файлов в папку, названную частью имени этого файла
Здравствуйте, господа.
Есть много файлов с форматом имени:
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 символа и создавать папку с таким именем, а затем перемещать файл.
Каким образом это можно реализовать? Может лучше создание папки и перемещение файла разбить на два скрипта?
Спасибо.
@echo off
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
for /f %%i in ('dir /b /a-d *.mp3') do (
set name=%%i
set namec=!name:~20,4!
if not exist !namec! md !namec!
move "!name!" "!namec!\!name!"
)
как обычно открыт вопрос что делать если будут иметь место файлы с одинаковым названием, но учитывая, что вроде как они вообще все в одной папке свалены, проблем возникнуть не должно.
Здесь и здесь:
17-12-2018_16-20-48_2000_3000.mp3
18-12-2018_10-26-31_1000_88005553535.mp3
могут быть только цифры?
Попробуйте так (на 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
Путь к исходному каталогу указывается аргументом скрипта (также можно просто перетащить папку на скрипт в Проводнике).
Спасибо!
Вроде бы всё работает. С названиями проблем возникнуть не должно.
Я пытался сделать что-то вроде этого:
@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х-значные цифры.
megaloman
18-12-2018, 12:26
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
FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /B /A:-D "%~dp0??-??-20??_??-??-??_*_*.mp3"`) DO (
FOR /F "tokens=7 delims=-_" %%i IN ("%%f") DO (
If Not Exist "%~dp0%%i" Md "%~dp0%%i"
Move "%~dp0%%f" "%~dp0%%i\" >nul
)
)
@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 понравился больше всего, спасибо всем!) Один из немногих форумов, где реально помогают, а не пытаются самоутвердиться за счёт чужого незнания.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.