|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Перемещение файлов по маске с созданием папки по дате в названии файла |
|
CMD/BAT - Перемещение файлов по маске с созданием папки по дате в названии файла
|
Новый участник Сообщения: 2 |
Добрый день. Я не силен в создании скриптов, но хотелось бы упростить следующую задачу:есть папка "new", в которую падают видео файлы формата X700056_00000020180728203340_0001.MP4. Необходимо, что бы файлы перемещались в папки вида \x7000xx\20180728 - где x7000xx и дата берутся из имени файла.
Я нашёл такой скрипт, но так и не получилось его изменить под свою задачу: pushd C:\new for %%F in (*.mp4) do ( 2>nul md "%%~nF" >nul move /y "%%~nF*.*" "%%~nF" ) Popd Подскажите пожалуйста, в каком направлении копать) |
|
Отправлено: 13:42, 07-08-2018 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать На PowerShell:
Скрытый текст
Param ( [System.String]$sSourceFolder = "c:\new", [System.String]$sRootDestFolder = "c:\new" ) if([System.IO.Directory]::Exists($sSourceFolder)) { if([System.IO.Directory]::Exists($sRootDestFolder)) { Get-ChildItem -Path $sSourceFolder -File | ForEach-Object -Process { if([System.Text.RegularExpressions.Regex]::IsMatch($_.Name, '^x\d+_000000\d{8}\d+_\d+\.mp4$', [System.Text.RegularExpressions.RegexOptions]::IgnoreCase)) { $oMatch = [System.Text.RegularExpressions.Regex]::Match($_.Name, '^(x\d+)_000000(\d{8})\d+_\d+(\.mp4)$', [System.Text.RegularExpressions.RegexOptions]::IgnoreCase) if($oMatch.Success) { $sDestFolder = "$sRootDestFolder\$($oMatch.Groups[1].Value)\$($oMatch.Groups[2].Value)" if(-not [System.IO.Directory]::Exists($sDestFolder)) { [System.IO.Directory]::CreateDirectory($sDestFolder) | Out-Null } if(-not [System.IO.File]::Exists("$sDestFolder\$($_.Name)")) { Write-Host "Moving source file [$($_.FullName)] into [$sDestFolder]." -ForegroundColor Cyan $_.MoveTo("$sDestFolder\$($_.Name)") } else { Write-Host "Can't move source file [$($_.FullName)], because destination file [$sDestFolder\$($_.Name)] already exists." -ForegroundColor Cyan } } else { Write-Host "Strange error for regular expression :)." -ForegroundColor Red } } else { Write-Host "Found other file [$($_.Name)] in source folder." -ForegroundColor Cyan } } } else { Write-Host "Can't find destination folder [$sDestFolder]." -ForegroundColor Red } } else { Write-Host "Can't find source folder [$sSourceFolder]." -ForegroundColor Red } В примере целевой каталог совпадает с исходным. |
Отправлено: 14:44, 07-08-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать AndreH,
если шаблон Цитата AndreH:
|
|
Отправлено: 17:29, 07-08-2018 | #3 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Аналогично alpap, раз уж нарисовал, представляю
@Echo Off cls Set "FileIn=Z:\Box_In\*_??????20*.mp4" Set "BoxOut=Z:\Box_Out" FOR %%f IN ("%FileIn%") DO Call :MyMove "%%f" "%BoxOut%" Pause GoTo :Eof :MyMove If Not Exist %1 GoTo :Eof FOR /F "tokens=1* delims=_" %%i IN ("%~nx1") DO Set "P1=%%i" &Set "P2=%%j" Set "P2=%P2:~6,8%" If Not Exist "%~2\%P1%\%P2%\" Md "%~2\%P1%\%P2%" Move /Y "%~dp1%P1%_??????%P2%*%~x1" "%~2\%P1%\%P2%\" GoTo :Eof Надеюсь, вы понимаете, что надо указать свои пути вместо моих Z:\......... Префикс (У Вас в частности X700056) может быть любой ненулевой длины, после него должно быть одно подчеркивание _ После подчеркивания перед датой должно быть 6 символов |
------- Последний раз редактировалось megaloman, 07-08-2018 в 18:19. Отправлено: 18:07, 07-08-2018 | #4 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать megaloman позже тоже подумал что ~6,8 надежнее.
|
|
Отправлено: 18:36, 07-08-2018 | #5 |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Ребята, спасибо огромное за помощь. Остановился на скрипте Powershell.
Чуть позже попробую скрипт cmd. Хорошего всем дня!!!! |
Отправлено: 09:14, 08-08-2018 | #6 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Поиск файлов по маске, дате и времени | nibble74 | AutoIt | 2 | 01-09-2017 17:31 | |
CMD/BAT - Копирование файлов в папки по маске файла и маске папки (BAT) | skyskiff | Скриптовые языки администрирования Windows | 7 | 20-09-2015 22:41 | |
CMD/BAT - сортировка файлов по папкам по дате в названии | insearches | Скриптовые языки администрирования Windows | 1 | 03-02-2013 17:03 | |
CMD/BAT - [решено] Создание папок по дате получения файлов и перемещение в них файлов | KamikadZZe | Скриптовые языки администрирования Windows | 1 | 01-09-2011 14:15 | |
CMD/BAT - [решено] Поиск файла по маске и по дате | Баян | Скриптовые языки администрирования Windows | 2 | 14-03-2011 13:32 |
|