Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 08.08.2020
Сообщений: 6
1

Копирование файлов и сортировка по датам в папки

08.08.2020, 14:43. Показов 3503. Ответов 18

Author24 — интернет-сервис помощи студентам
Здравствуйте!
перечитал много разделов на форуме но похоже так и не нашел решение.
Помогите создать BAT файл который будет выполнять следующее...

имеем папку на флешке у которой известен точный путь в системе D:\PRIVATE\M4ROOT\CLIP
в папке находятся файлы с расширением MP4 и XML

задача перенести (не скопировать) файлы с расширением MP4 на диск F:\ARHIV таким образом что бы в папке ARHIV создавались папки с названием дат файлов с расширением MP4 в формате ГОД МЕСЯЦ ДЕНЬ

пример :

D:\PRIVATE\M4ROOT\CLIP\C1977.MP4 фаил создан ‎7 ‎августа ‎2020 ‎г создать папку на F:\ARHIV\2020-08-07 и перенести туда
D:\PRIVATE\M4ROOT\CLIP\C1976.MP4 фаил создан ‎6 ‎августа ‎2020 ‎г создать папку на F:\ARHIV\2020-08-06 и перенести туда
D:\PRIVATE\M4ROOT\CLIP\C1975.MP4 фаил создан ‎5 ‎августа ‎2020 ‎г создать папку на F:\ARHIV\2020-08-05 и перенести туда

естественно название файлов MP4 могут быть разные
а все файлы с расширением XML удалить.

Заранее спасибо кто откликнется и поможет мне.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.08.2020, 14:43
Ответы с готовыми решениями:

Копирование TXT-файлов из одной папки и BMP-файлов из другой папки в папку, в которой находится пакетный файл
Доброго времени суток. У кого есть возможность сообразить какой код мне нужет чтобы сделать вот...

Копирование TXT-файлов из одной папки и BMP-файлов из другой папки в папку, в которой находится пакетный файл
Доброго времени суток. У кого есть возможность сообразить какой код мне нужет чтобы сделать вот...

Копирование нескольких файлов из локальной папки в две сетевые папки с последующим удалением исходных файлов
Есть практическая задача: нужно накидать батник, который будет в определённое время брать из одной...

Копирование текстовых файлов по датам
Здравствуйте. Помогите, пожалуйста, решить задачку. Есть несколько текстовых файлов, созданных в...

18
6228 / 2670 / 1051
Регистрация: 06.06.2017
Сообщений: 9,127
08.08.2020, 18:00 2
leonidTim, зачем тут понадобился батник, когда это можно из ФМ за пару-тройку операций сделать?
Windows Batch file
1
2
3
4
5
6
7
8
@echo off&set "r=>nul reg add HKCU\Control" "Panel\International /v sShortDate /f /t REG_SZ /d "
for /f "skip=2 tokens=3" %%d in ('reg query HKCU\Control" "Panel\International /v sShortDate') do ^
if %%d neq yyyy-MM-dd %r%yyyy-MM-dd&&set p=%%d
 
set odir=F:\ARCHIV
cd/d D:\PRIVATE\M4ROOT\CLIP
for /f "tokens=1,3*" %%i in ('dir/a-d/-c/tc *.mp4^|find "p4"') do 2>nul md %odir%\%%i&>nul move/y "%%k" %odir%\%%i\
2>nul del/a/f/q *.xml&if defined p %r%%p%
Принцип с форматом даты взят отсюда.
0
0 / 0 / 0
Регистрация: 08.08.2020
Сообщений: 6
08.08.2020, 21:46  [ТС] 3
Спасибо большое за то что откликнулись но ваш предложенный вариант не работает создал BAT файл по Вашему примеру открывается на секунду и удалила только все XML файлы а MP4 ФАЙЛЫ так и остались на месте
может что то надо поправить ?

Добавлено через 9 минут
FlasherX, может что то надо поправить ?
0
6228 / 2670 / 1051
Регистрация: 06.06.2017
Сообщений: 9,127
08.08.2020, 23:02 4
В середине 7 строки ключик добавьте: ...|find/i "p4"...
0
0 / 0 / 0
Регистрация: 08.08.2020
Сообщений: 6
08.08.2020, 23:20  [ТС] 5
еще раз спасибо добавил но нет результата файлы не переносятся и не создаются папки

Добавлено через 10 минут
я нашел скрипт который у меня работает только не могу переделать его под мои нужды переписать путь и название папок

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
chcp 1251 >nul
:: Скрипт копирования файлов рекурсивно из заданной директории в каталоги, имя которых будет = дате модификации файлов
@echo off
:: В скрипт включена поддержка файлов-папок с буквами украинского алфавита
setlocal EnableDelayedExpansion EnableExtensions
 
::Искомое расширение файлов
set Ext=*.mp4 *.wmv *.MPG *.MOV *.WMV *.AVI
 
::Откуда копировать
::set /p "x=Выберите исходную папку" < nul
::call :GetFolder From
::if not defined From exit /B
::echo : %From%
 
::Куда копировать
::set /p "x=Выберите целевую папку" < nul
::call :GetFolder To
::if not defined To exit /B
::echo : %To%
 
::Откуда копировать
set From=%CD%
::Куда копировать
set To=%CD%
 
:: Если целевой папки нет - создаем ее
if not exist "%To%" md "%To%"
 
:: Поддержка символов кодовой страницы 1251
chcp 1251>nul& set LanguageFlag=true
 
rem Сформируем специальную строку быстрого обхода нескольких расширений файлов - путь вида c:\path\*.1,c:\path\*.2, ...
call set St="!From!\%%ext: =","!From!\%%"
 
for /F "delims=" %%A in ('dir /B /S /A-D %St%') do (
  rem Восстанавливаем кодовую страницу 866, чтобы получать вывод консоли в читабельном виде.
  if defined LanguageFlag (chcp 866>nul& Set LanguageFlag=)
  rem Индикация текущей копируемой папки
  if "!curFolder!" neq "%%~dpA" (echo Читаю %%~dpA& set curFolder=%%~dpA)
  rem Получаем конечный путь с датой текущего файла (выделяю с формата дата-время только дату)
  for /F %%D in ("%%~tA") do (
  rem echo %%D
    for /f "tokens=1-7 delims=/-:., " %%a in ("%%~tA") do (
      rem echo %%c%%b%%a_%%d%%e
      set ToReal=%%c.%%b
    )
  )
  rem Обход ошибки в имени файла, если в настройках стандарта системы установлен формат даты через знаки /
  set ToReal=%To%\!ToReal:/=.!
  rem Создаем конечную папку, если ее нет
  if not exist "!ToReal!" md "!ToReal!"
  rem Проверяем не занят ли полный путь. Если занят, получаем свободное имя с добавкой цифры в скобках +1
  call :GetEmptyNameMod "!ToReal!" "%%A" NewName
  rem Копируем файл
  if not errorlevel 1 copy /Y "%%A" "!ToReal!\!NewName!" >nul
)
chcp 866 >nul
:: Ожидаем действия пользователя
pause
:: Выход из пакетного файла
goto :eof
 
:GetEmptyNameMod %1-Folder %2-FullFileName %3-Var.Return %4-Optional.System.Num
:: Рекурсивная функция для получения сбободного имени файла по заданной директории
:: Модификация: если файл совпадает по содержимому с одним из одноименных файлов,
:: новый индекс не выдается (предотвращение дубликатов).
if "%~4"=="" (
    Set "NewFileName=%~nx2"
  ) else (
    Set "NewFileName=%~n2(%~4)%~x2"
)
if exist "%~1\%NewFileName%" (
    FC /B "%~1\%NewFileName%" "%~2" >nul && (
      Set "%~3=%NewFileName%"
      Exit /B 1
    ) || (
      Set Num=%~4
      Set /A Num+=1
      Call :GetEmptyNameMod "%~1" "%~2" "%~3" "!Num!"
    )
  ) else (
    Set "%~3=%NewFileName%"
    Exit /B 0
)
Exit /B 0
 
:GetFolder %1-var.Where.Save.FolderName
chcp 1251 >nul
for /f "usebackq delims=" %%i in (
    `@"%systemroot%\system32\mshta.exe" "javascript:var objShellApp = new ActiveXObject('Shell.Application');var Folder = objShellApp.BrowseForFolder(0, 'SELECT FOLDER',1, '::{20D04FE0-3AEA-1069-A2D8-08002B30309D}');try {new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(Folder.Self.Path)};catch (e){};close();" ^
    1^|more`
) do set %~1=%%i
chcp 866 >nul
Exit /B
0
6228 / 2670 / 1051
Регистрация: 06.06.2017
Сообщений: 9,127
08.08.2020, 23:47 6
leonidTim, диск F: точно существует? Сами mp4 не являются симлинками?
А, у меня реестр затрагивается. Запустите с повышением.
0
0 / 0 / 0
Регистрация: 08.08.2020
Сообщений: 6
08.08.2020, 23:51  [ТС] 7
диск F точно есть
mp4 на флешки что пишет камера в системе
простити но я не знаю как проверить являются они симлинками или нет

Добавлено через 1 минуту
Запустите с повышением. ??? как это ,?
0
6228 / 2670 / 1051
Регистрация: 06.06.2017
Сообщений: 9,127
09.08.2020, 00:03 8
ПКМ > Запуск от имени администратора.

Если это исходники камеры, то точно не симлинки.

Добавлено через 3 минуты
Кстати echo %date% в консоли, случаем, не в таком формате 08/08/20 дату возвращает?
Иначе даже без первых трёх строк папки бы создались, только в ином формате.
0
3049 / 1056 / 475
Регистрация: 29.05.2016
Сообщений: 4,440
09.08.2020, 00:46 9
leonidTim, добрый вечер! Запускаете от имени администратора:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@echo off
setlocal enabledelayedexpansion
pushd "D:\PRIVATE\M4ROOT\CLIP"
del *.xml /f /q
for /f "tokens=1,2,3* delims= " %%a in ('dir /a-d/tc *.exe') do (
    if not %%a==Том (
        if not %%a==Серийный (
            if not %%a==Содержимое (
                if not %%b==файлов (
                    if not %%b==папок (
                        set "file=%%d"
                        set "date_modify=%%a"
                        for /f "tokens=1-3 delims=." %%a in ("!date_modify!") do (
                            if not exist F:\ARHIV\%%c-%%b-%%a (
                                mkdir F:\ARHIV\%%c-%%b-%%a
                                move "!file!" "F:\ARHIV\%%c-%%b-%%a"
                            ) else (
                                move "!file!" "F:\ARHIV\%%c-%%b-%%a"
                            )
                        )
                    )
                )
            )
        )
    )
)
pause
0
6228 / 2670 / 1051
Регистрация: 06.06.2017
Сообщений: 9,127
09.08.2020, 00:47 10
Короче, дело в ночи. Мне отчалить надо. Вот vbs, чтобы с правами не мучиться:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Option Explicit
Dim oItems, oFold, F, D, Fold
Const iFold = "D:\PRIVATE\M4ROOT\CLIP"
With CreateObject("Shell.Application")
  Set oItems = .NameSpace(iFold).Items
  Set oFold  = .NameSpace("F:\ARCHIV")
End With
oItems.Filter 73920, "*.mp4"
For Each F In oItems
  D = F.ExtendedProperty("Create")
  Fold = Year(D) & "-" & Right(0 & Month(D), 2) & "-" & Right(0 & Day(D), 2)
  oFold.NewFolder Fold: oFold.ParseName(Fold).GetFolder.MoveHere F.Path, 5652
Next
CreateObject("Scripting.FileSystemObject").File iFold & "\*.xml", 1
Set oItems = Nothing: Set oFold = Nothing
0
3049 / 1056 / 475
Регистрация: 29.05.2016
Сообщений: 4,440
09.08.2020, 00:47 11
Батник сохраняете в кодировке OEM-866
0
6228 / 2670 / 1051
Регистрация: 06.06.2017
Сообщений: 9,127
09.08.2020, 00:48 12
leonidTim, скрипт отработает быстрее всяких батников.
0
3049 / 1056 / 475
Регистрация: 29.05.2016
Сообщений: 4,440
09.08.2020, 00:57 13
Исправленный вариант:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@echo off
setlocal enabledelayedexpansion
pushd "D:\PRIVATE\M4ROOT\CLIP"
del *.xml /f /q
for /f "tokens=1,2,3* delims= " %%a in ('dir /a-d/tc *.mp4') do (
    if not %%a==Том (
        if not %%a==Серийный (
            if not %%a==Содержимое (
                if not %%b==файлов (
                    if not %%b==папок (
                        set "file=%%d"
                        set "date_modify=%%a"
                        for /f "tokens=1-3 delims=." %%a in ("!date_modify!") do (
                            if not exist F:\ARHIV\%%c-%%b-%%a (
                                mkdir F:\ARHIV\%%c-%%b-%%a
                                move "!file!" "F:\ARHIV\%%c-%%b-%%a"
                            ) else (
                                move "!file!" "F:\ARHIV\%%c-%%b-%%a"
                            )
                        )
                    )
                )
            )
        )
    )
)
pause
0
6228 / 2670 / 1051
Регистрация: 06.06.2017
Сообщений: 9,127
09.08.2020, 00:58 14
Лучший ответ Сообщение было отмечено leonidTim как решение

Решение

Вот блин, в коде нужное стёрлось. Ещё раз:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Option Explicit
Dim oItems, oFold, F, D, Fold
Const iFold = "D:\PRIVATE\M4ROOT\CLIP"
With CreateObject("Shell.Application")
  Set oItems = .NameSpace(iFold).Items
  Set oFold  = .NameSpace("F:\ARCHIV")
End With
oItems.Filter 73920, "*.mp4"
For Each F In oItems
  D = F.ExtendedProperty("Create")
  Fold = Year(D) & "-" & Right(0 & Month(D), 2) & "-" & Right(0 & Day(D), 2)
  oFold.NewFolder Fold: oFold.ParseName(Fold).GetFolder.MoveHere F.Path, 5652
Next
oItems.Filter 73920, "*.xml": If oItems.Count Then _
CreateObject("Scripting.FileSystemObject").DeleteFile iFold & "\*.xml", 1
Set oItems = Nothing: Set oFold = Nothing
0
0 / 0 / 0
Регистрация: 08.08.2020
Сообщений: 6
09.08.2020, 01:40  [ТС] 15
ПКМ > Запуск от имени администратора.
всегда повторно запускал от имени админа не работает

Кстати echo %date% в консоли, случаем, не в таком формате 08/08/20 дату возвращает?
там вообще не создаются

попробовал без трех строчек тоже самое а вот у меня есть bat фаил который тупо создает текущ дату с названием папке в то формате который мне нужен

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for /F "tokens=1-4 delims=. " %%i in ('date /t') do (
set Day=%%i
set Month=%%j
set Year=%%k
)
 
for /F "tokens=1-4 delims=: " %%i in ('time /t') do (
set Hour=%%i
set Minute=%%j
set Second=%%k
)
 
 
md \ARCHIV\%Year%-%Month%-%Day%
Добавлено через 14 минут
FlasherX,

Ваш VBS работает у меня только все файлы сгребает в одну папку 2020-08-08
а надо что бы по разным но все равно это уже достижение большое.

Добавлено через 19 минут
Karen87,

спасибо огромное за ваш скрипт у вас тоже скидывает все файлы в одну папку текущей даты и при этом создает другие от ни ладно можно быстро избавится не проблема но вот сортировки нет
0
6228 / 2670 / 1051
Регистрация: 06.06.2017
Сообщений: 9,127
09.08.2020, 01:45 16
Вернулся. Что там.
Цитата Сообщение от leonidTim Посмотреть сообщение
всегда повторно запускал от имени админа не работает
Странно.
Цитата Сообщение от leonidTim Посмотреть сообщение
там вообще не создаются
Тут никакого создания. Только тест с выводом даты.
Цитата Сообщение от leonidTim Посмотреть сообщение
сгребает в одну папку
Только в том случае, если даты создания .mp4 совпадают.
Сами же условием задали:
Цитата Сообщение от leonidTim Посмотреть сообщение
фаил создан
, а не изменён. Если нужна дата модификации/правки/изменения, в 10 строке Create меняем на Write.
0
3049 / 1056 / 475
Регистрация: 29.05.2016
Сообщений: 4,440
09.08.2020, 01:52 17
leonidTim, не совсем понял Вас. Все файлы .mp4 скрипт скидывает в одну папку, но при этом создает другие. Это я понял. То, что Вы написали дальше я не понял. Покажите вывод команды:
Windows Batch file
1
dir /a-d/tc D:\PRIVATE\M4ROOT\CLIP\*.mp4
0
0 / 0 / 0
Регистрация: 08.08.2020
Сообщений: 6
09.08.2020, 02:06  [ТС] 18
FlasherX

супер ВЫ просто Бог изменил на врайт и все заработало
Огромное спасибо но если можно было еще визуализировать процесс переноса ну типо сколько осталось до конца в процентах или открытая консоль что бы видно было что она что то делает а то файлы бывают большие по 20 гигов и не понятно когда закончится или закончилось а то нажал и пустота.
но все равно супер Спасибо еще раз
0
6228 / 2670 / 1051
Регистрация: 06.06.2017
Сообщений: 9,127
09.08.2020, 02:17 19
leonidTim, хосподи, кем меня только не называли, теперь ещё и бог.
Пожал'ста. Визуал я как раз отключил для скорости. В конце 12 строки , 5652 уберите.
А лучше даже число на 24 поменяйте, чтобы нумерация осталась при именном совпадении.
0
09.08.2020, 02:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2020, 02:17
Помогаю со студенческими работами здесь

Копирование: Ввод имени папки и копирование из нее файлов
Доброго времени суток! Реально ли реализовать подобное с помощью bat ? Знаю, что можно создать...

Копирование файлов из одной папки в другую, но с пропуском одинаковых файлов в этих папках
Доброго времени суток. Прошу помощи в написании батника. Задача: Есть папка А с файлами 1,2,3 и...

Копирование файлов по списку в текстовом файле в папки с именами, соответствующими расширениям этих файлов
Добрый день, уважаемые форумчане. Прошу помощи с написанием bat-файла. Значит задача такая. Есть...

Копирование файлов в нужные папки, исходя из имён файлов
подскажите, задача примерно аналогичная в папке множество файлов wav, у всех в начале присутствует...

Копирование файлов из сетевой папки
Добрый день толкнулся с проблемой что не могу скопировать файл из сетевой папки. В рамках...

Копирование файлов в разные папки
Имеется у нас скачанный: avto.bat который находиться у меня к примеру в одной папке с readme.txt ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru