|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Нужна помощь в написании скрипта работы с файлами. |
|
|
CMD/BAT - [решено] Нужна помощь в написании скрипта работы с файлами.
|
Новый участник Сообщения: 8 |
Профиль | Отправить PM | Цитировать Доброго времени суток господа форумчане! Требуется помощь в написании скрипта. Имеем следующее : программа 3D съемки дает на выходе 32 .jpg файла в папку с рандомным названием (эта папка создается всегда в одном месте скажем в D:/Photo) . Задача состоит в том , что бы переименовать эти .jpg фалы по очереди , начиная с 0 до 31(тоесть должно получиться 0.jpg.....31.jpg) и запаковать их в архив с помощью 7zip под названием photo.zip . Заранее спасибо за помощь.
|
|
Отправлено: 09:28, 20-08-2019 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать nik123456654321, в D:/Photo папка с рандомным названием единственная? Или надо обработать все папки? Что делать с файлами после упаковки? В каком порядке присваиваются номера (по дате/времени изменения?) Не лучше ли именовать файлы 00.jpg 01.jpg ...09.jpg 10.jpg 11.jpg... 31.jpg Куда девать файл photo.zip?
|
------- Отправлено: 09:47, 20-08-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать megaloman, Здравствуйте,спасибо , что откликнулись ! Да папка будет единственная . После упаковки файлы будут загружаться на ftp сайта (но это уже другая история ). Номера присваиваются по дате создания я думаю (т.е. делаются последовательно 32 фото и их так же по порядку создания надо переименовывать начиная с 0 и до 31 ). С названием файлов ,к сожалению, они должны именоваться именно с 0.jpg и т.д. (это требования скрипта , который потом из них разворачивает 3D модель на сайте ). Photo.zip можно положить в туже корневую папку рядом (вместо ) папки с рандомным названием.
|
Отправлено: 10:52, 20-08-2019 | #3 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать nik123456654321,
@Echo Off cls Set "BoxIn=D:\Photo" Set "Mask=*.jpg" Set "FileOut=D:\Photo\Photo.zip" Set "Arc="C:\Program Files\7-Zip\7z.exe" a -mx5 -sdel --" Set /A NContr=32 If Not Exist "%BoxIn%\" (Echo !!! Folder "%BoxIn%\" not exists. Script Exit. &Pause &Exit /B 2) If Exist "%FileOut%" (Echo !!! File "%FileOut%" already exists. Script Exit. &Pause &Exit /B 2) Set /A N=0 FOR /F "usebackq delims=" %%d IN (`2^>nul Dir "%BoxIn%\" /B /A:D /O:-D`) DO ( FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%%d\%Mask%" /B /A:-D /O:D`) DO ( Call Ren "%BoxIn%\%%d\%%f" %%N%%%%~xf Set /A N+=1 ) Call :Pack "%BoxIn%\%%d\%Mask%" "%FileOut%" %%N%% %NContr% &&Exit /B ) If "%N%"=="0" (Echo !!! In Subfolders of Folder "%BoxIn%\" files %Mask% not found. Script Exit. &Pause &Exit /B 2) Exit /B :Pack If "%3"=="0" Exit /B 1 %Arc% %2 %1 &&Rd /S /Q "%~dp1" If Not "%3"=="%4" Echo. &Echo Found In %1 files N=%3^<^>%4 files &Echo. &Pause Exit /B 0 Конечно, размер архивного файла будет больше, но, для jpg не намного (менее процента). |
------- Последний раз редактировалось megaloman, 20-08-2019 в 14:27. Отправлено: 13:58, 20-08-2019 | #4 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать megaloman, Огромное спасибо ! Завтра буду тестировать.
|
|
Отправлено: 16:06, 20-08-2019 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Скрытый текст
$sRootFolder = 'C:\Мои проекты\0273\Photo' $sArchiveFile = "$sRootFolder\Photo.zip" if([System.IO.Directory]::Exists($sRootFolder)) { $oDirectoryInfo = Get-ChildItem -Path $sRootFolder -Directory if($oDirectoryInfo -is [System.IO.DirectoryInfo]) { $aFileInfo = @(Get-ChildItem -Path "$($oDirectoryInfo.FullName)\*" -Include '*.jpg' -File) if($aFileInfo.Count -eq 32) { try { Compress-Archive -Path $aFileInfo -DestinationPath $sArchiveFile -CompressionLevel NoCompression -Force -ErrorAction SilentlyContinue Write-Host "Archive file [$sArchiveFile] created." -ForegroundColor Green } catch { Write-Host "Can't create archive file [$sArchiveFile]." -ForegroundColor Red } } else { Write-Host "Need exactly 32 jpg files in subfolder [$($oDirectoryInfo.FullName)]." -ForegroundColor Red } } else { Write-Host "Need at least one (and no more) subfolder in root folder [$sRootFolder]." -ForegroundColor Red } } else { Write-Host "Can't find root folder [$sRootFolder]." -ForegroundColor Red } |
Последний раз редактировалось Iska, 21-08-2019 в 21:44. Причина: Не всё ТЗ реализовано :(. Отправлено: 17:10, 20-08-2019 | #6 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Iska, Спасибо !
|
Отправлено: 08:42, 21-08-2019 | #7 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Еще раз всем спасибо! Работает так , как надо.
|
Отправлено: 10:24, 21-08-2019 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать К сожалению, на радостях я тупо забыл про:
Цитата nik123456654321:
Скрытый текст
$sRootFolder = 'C:\Мои проекты\0273\Photo' $sArchiveFile = "$sRootFolder\Photo.zip" $sExtension = 'jpg' if([System.IO.Directory]::Exists($sRootFolder)) { $oDirectoryInfo = Get-ChildItem -Path $sRootFolder -Directory if($oDirectoryInfo -is [System.IO.DirectoryInfo]) { $aFileInfo = @(Get-ChildItem -Path "$($oDirectoryInfo.FullName)\*" -Include "*.$sExtension" -File) if($aFileInfo.Count -eq 32) { $aFileInfo | ForEach-Object -Process { do { $sNewFileName = "$($oDirectoryInfo.FullName)\$([System.IO.Path]::GetRandomFileName())$($_.Extension)" } until (-not [System.IO.File]::Exists($sNewFileName)) [System.IO.File]::Move($_.FullName, $sNewFileName) } $aFileInfo = @(Get-ChildItem -Path "$($oDirectoryInfo.FullName)\*" -Include "*.$sExtension" -File) | Sort-Object -Property 'CreationTime' $aFileInfo | ForEach-Object -Begin { $iCount = 0 } -Process { [System.IO.File]::Move($_.FullName, "$($oDirectoryInfo.FullName)\$(($iCount++).ToString())$($_.Extension)") } $aFileInfo = @(Get-ChildItem -Path "$($oDirectoryInfo.FullName)\*" -Include "*.$sExtension" -File) try { Compress-Archive -Path $aFileInfo -DestinationPath $sArchiveFile -CompressionLevel NoCompression -Force -ErrorAction SilentlyContinue Write-Host "Archive file [$sArchiveFile] created." -ForegroundColor Green } catch { Write-Host "Can't create archive file [$sArchiveFile]." -ForegroundColor Red } } else { Write-Host "Need exactly 32 $sExtension files in subfolder [$($oDirectoryInfo.FullName)]." -ForegroundColor Red } } else { Write-Host "Need at least one (and no more) subfolder in root folder [$sRootFolder]." -ForegroundColor Red } } else { Write-Host "Can't find root folder [$sRootFolder]." -ForegroundColor Red } P.S. Надо же было столько возиться, чтобы сохранить оригинальные даты файлов, а потом открыть новосозданный архив в 7-Zip и внезапно обнаружить, что командлет Compress-Archive не сохраняет в архиве даты создания файлов . |
|
Последний раз редактировалось Iska, 21-08-2019 в 22:03. Отправлено: 21:48, 21-08-2019 | #9 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
------- Отправлено: 21:57, 21-08-2019 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Помощь в написании скрипта.. | Boris81G | Программирование в *nix | 1 | 09-10-2015 12:46 | |
PowerShell - Помощь в написании скрипта | IVa_ | Скриптовые языки администрирования Windows | 3 | 10-07-2015 14:12 | |
VBS/WSH/JS - Нужна помощь в написании скрипта автологина через веб-форму сайта | Rampages | Скриптовые языки администрирования Windows | 4 | 08-03-2014 04:50 | |
Нужна снова ваша помощь в написании интересного скрипта | Magnus | Вебмастеру | 2 | 09-06-2005 20:26 | |
Нужна помощь в написании скрипта | Magnus | Вебмастеру | 7 | 06-05-2005 10:53 |
|