|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Создание папок исходя из дат создания файлов и перемещение их в эти папки |
|
|
CMD/BAT - [решено] Создание папок исходя из дат создания файлов и перемещение их в эти папки
|
Новый участник Сообщения: 9 |
Профиль | Отправить PM | Цитировать Есть папка в которую камера скидывает видео. За два месяца там накопилось больше 10 тысяч файлов и windows уже не может их все показать.
Прошу помочь создать батник чтобы раскидывать эти файлы по структуре папок вида YYYY\MM\DD |
|
Отправлено: 20:17, 02-10-2016 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата mezzin:
Попробуйте так (на WSH): Скрытый текст
Option Explicit Dim strSourceFolder Dim objFile Dim strDestPath If WScript.Arguments.Count = 1 Then strSourceFolder = WScript.Arguments.Item(0) With WScript.CreateObject("Scripting.FileSystemObject") If .FolderExists(strSourceFolder) Then For Each objFile In .GetFolder(strSourceFolder).Files strDestPath = strSourceFolder & "\" & _ CStr(Year(objFile.DateCreated)) & "\" & _ Right("00" & CStr(Month(objFile.DateCreated)), 2) & "\" & _ Right("00" & CStr(Day(objFile.DateCreated)) , 2) CreateFolderEx strDestPath objFile.Move strDestPath & "\" Next Else WScript.Echo "Can't find source folder [" & strSourceFolder & "]." WScript.Quit 2 End If End With Else WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>" WScript.Quit 1 End If WScript.Quit 0 '============================================================================= '============================================================================= Sub CreateFolderEx(strPath) With WScript.CreateObject("Scripting.FileSystemObject") If Not .FolderExists(strPath) Then CreateFolderEx .GetParentFolderName(strPath) .CreateFolder strPath End If End With End Sub '============================================================================= Сохраните код в файл с расширением «.vbs». Путь к исходной папке указывается аргументом скрипта (также можно просто перетащить папку на скрипт в Проводнике). |
|
Отправлено: 21:15, 02-10-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Цитата:
Если это упростит решение задачи можно просто создавать папки вида YYYY_MM_DD и перемещать в них файлы. |
|
Отправлено: 21:30, 02-10-2016 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата mezzin:
|
|
Отправлено: 21:36, 02-10-2016 | #4 |
Ветеран Сообщения: 2727
|
Профиль | Отправить PM | Цитировать Вот батник, сохраните его в файл с расширением .bat. Можно в той же папке, где и файлы, но лучше в другой.
@Echo Off Set "Where=Z:\Old" Set "Mask=*.*" Set "Out=Z:\Old" Set "Dir=Dir /A:-D /O:D /T:C" Pushd "%Where%" SetLocal EnableExtensions EnableDelayedExpansion Set "DOld=" FOR /F "usebackq tokens=1,3,*" %%i IN (`%Dir% "%Where%\%Mask%" 2^>nul`) DO ( Set "DNew=%%i" Set "DNew=!DNew:~2,1!!DNew:~5,1!" If "!DNew!"==".." If /I Not "%%k"=="%0" ( Set "DNew=%%i" If /I Not "!DOld!"=="%%i" ( Set "NDir=%Out%\!DNew:~6,4!\!DNew:~3,2!\!DNew:~0,2!\" MD "!NDir!" Set "DOld=%%i" ) move "%%k" "!NDir!" >nul ) ) popd Подразумевается, что в системе дата отображается в формате дд.мм.гггг Если надо иметь папки в формате YYYY_MM_DD, то вместо имеющейся строки примените: Set "NDir=%Out%\!DNew:~6,4!_!DNew:~3,2!_!DNew:~0,2!\" |
|
------- Последний раз редактировалось megaloman, 02-10-2016 в 23:09. Отправлено: 22:55, 02-10-2016 | #5 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать megaloman, похоже что все файлы копируются в первую созданную папку
|
Отправлено: 20:02, 04-10-2016 | #6 |
Ветеран Сообщения: 2727
|
Профиль | Отправить PM | Цитировать mezzin, Я это проходил. Подозреваю, Вы для проверки скопировали файлы в другую папку. При этом, дата создания будет сегодняшняя, а Вот дата изменения будет реальная прошедшая. Попробуйте работать не с датой создания, а с датой изменения. ИМХО, не думаю, что Вы корректировали ваши видеофайлы, поэтому дата создания в исходной папке = дате изменения. Подкорректируйте батник:
Set "Dir=Dir /A:-D /O:D /T:W" |
------- Отправлено: 21:56, 04-10-2016 | #7 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Все работает как надо, спасибо megaloman!
Теперь сделаю несколько батников с разными переменными для каждой из папок куда камеры скидывают видео и буду их раз в сутки запускать по очереди из общего батника. Так ведь будет работать? |
Отправлено: 11:07, 06-10-2016 | #8 |
Ветеран Сообщения: 2727
|
Профиль | Отправить PM | Цитировать Напишите строки с Вашими папками Call :Moving "Откуда" "Маска" "Куда" столько раз, сколько нужно, и не надо куча батников
@Echo Off SetLocal EnableExtensions EnableDelayedExpansion Set "Dir=Dir /A:-D /O:D /T:W" rem Set "Dir=Dir /A:-D /O:D /T:C" Call :Moving "Z:\Old" "*.*" "Z:\Old" Call :Moving "Z:\Откуда" "*.*" "Z:\Куда" Call :Moving "Z:\Tralala" "*.*" "Z:\Kuku" GoTo :Eof :Moving rem %1-откуда, %2-маска, %3-куда Pushd %1 Set "DOld=" FOR /F "usebackq tokens=1,3,*" %%i IN (`%Dir% "%~1\%~2" 2^>nul`) DO ( Set "DNew=%%i" Set "DNew=!DNew:~2,1!!DNew:~5,1!" If "!DNew!"==".." If /I Not "%%k"=="%0" ( Set "DNew=%%i" If /I Not "!DOld!"=="%%i" ( Set "NDir=%~3\!DNew:~6,4!\!DNew:~3,2!\!DNew:~0,2!\" rem Set "NDir=%~3\!DNew:~6,4!_!DNew:~3,2!_!DNew:~0,2!\" MD "!NDir!" 2>nul Set "DOld=%%i" ) move "%%k" "!NDir!" 1>nul ) ) popd |
------- Отправлено: 16:23, 06-10-2016 | #9 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать megaloman, вы монстр, Спасибо еще раз!
|
Отправлено: 16:44, 06-10-2016 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Перемещение файлов из нескольких папок в одну. | BatizhevNH | Скриптовые языки администрирования Windows | 4 | 14-05-2012 19:32 | |
CMD/BAT - [решено] Создание папок по дате получения файлов и перемещение в них файлов | KamikadZZe | Скриптовые языки администрирования Windows | 1 | 01-09-2011 14:15 | |
VBS/WSH/JS - Перемещение файлов и папок в разные папки... | WalkManX | Скриптовые языки администрирования Windows | 0 | 07-08-2011 22:37 | |
CMD/BAT - Перемещение нескольких папок из папки E2E2~1 | ameds | Скриптовые языки администрирования Windows | 12 | 23-06-2010 17:27 | |
VBS/WSH/JS - Создание папок исходя из имени хоста.Создание ярлыков. | ufunf | Скриптовые языки администрирования Windows | 1 | 18-02-2010 13:59 |
|