![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Архивирование файлов определенного типа из подкаталогов |
|
|
CMD/BAT - Архивирование файлов определенного типа из подкаталогов
|
Новый участник Сообщения: 11 |
Добрый день.
Прошу помощи с написанием скрипта для решения такой задачи: Вводные Имеем множество папок, в каждой из которых есть файлы с различными расширениями и размерами соответственно.
Необходимо создать архивы из файлов находящихся в этих подпапках и сохранить их в "Основная_папка". При этом: 1. Архив должен содержать только файлы определенного расширения ".ххх". 2. Архив должен именоваться названием файла наибольшего веса каждой отдельной подпапки. 3. Архив должен быть формата zip. 4. Архив должен иметь расширение файла ".yyy". На данный момент использую следующий скрипт, запускаемый в "Основная_папка": FOR /D %%i IN (*) DO ( pushd "%%i" "C:\Program Files\7-Zip\7zG.exe" a -tzip "..\%%~i.yyy" * popd ) Создавать архивы из всех файлов находящихся в этих подпапках и сохранять их в "Основная_папка". Называть архив именем подпапки. Применять расширение ко всем архивам ".yyy". Допускаемые инструменты: WinRAR 7z - предпочтительно Допускаемый вариант решения: CMD/BAT Powershell Заранее спасибо. |
|
Отправлено: 12:42, 28-04-2021 |
fascinating rhythm Сообщения: 6705
|
Профиль | Отправить PM | Цитировать Цитата more_than_hater:
Старый вариант работал в PSv7, но в v5.1 почему-то нет. Fors1k, как вы делаете подсветку кода здесь? |
|
------- Отправлено: 13:32, 29-04-2021 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 193
|
Профиль | Отправить PM | Цитировать Цитата more_than_hater:
Цитата DJ Mogarych:
![]() |
||
Последний раз редактировалось Fors1k, 29-04-2021 в 14:45. Отправлено: 14:25, 29-04-2021 | #22 |
Новый участник Сообщения: 11
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
Сделали четко по ТЗ, здесь вопросов нет. В ходе тестирования скриптов Ув. Elven и Ув. Fors1k обнаружил проблему, что отборка по размеру файла - не всегда есть хорошо. Попадаются ситуации, когда самый крупный по размеру файл в подпапке - не является нужным. Ув. Fors1k использовал в своем скрипте метод отбора substring(0,4) - где 0 - с какого символа начинать сравнение и 4 - по какой символ включительно заканчивать сравнение. В сравнении учавствуют все файлы. Т.к. знаний для написания своих команд мне на текущий момент нехватает (читать доки не перечитать) - попробовал использовать строку кода со скрипта Ув. Fors1k, модифицировав ваш, однако на выходе $name не применяется: Скрытый текст
$dir = "C:\Users\admin\Documents\Raccoon\content\test_apps" $ext = "*.apk" dir "$dir" -Directory |? {[System.IO.Directory]::EnumerateFiles("$($_.fullname)", "$ext", "Alldirectories")} |% { $name = (Get-ChildItem -Path $dir $ext|Where-Object{"$_".substring(0,4) -eq "$dir".substring(0,4)}).BaseName $files |Compress-Archive -DestinationPath ($zip = "$dir\$((get-date).ToString("yyyy-MM-dd-hh-mm-ss"))-$name.zip") Rename-Item "$zip" -NewName ($zip -replace "zip$","apps") } Пробовал запускать скрипт через отладку в ISE - ошибку не выводит. Можете разъяснить, почему все "так просто" не происходит? Вроде все переменные совпадают... P.S. Скрипт Ув. Elven закончил работу с 13 папками за 53,9 сек Скрипт Ув. Fors1k закончил работу с 13 папками за 28,7 сек Тоже хотелось бы понять, почему так происходит. Очень "грубо догадываясь" - в скрипте Ув. Elven красиво расписан переход от процедуре к процедуре, из за чего длинна кода увеличена, что способствует уменьшению скорости работы. В это же время, Ув. Fors1k решил не расписывать переходы и сделать код "все в одной строке", из-за чего разобраться в нем чуть сложнее, но работает в разы быстрее. Может кто-то объяснить более внятно, почему такая разница в скорости? Еще раз всем спасибо за потраченное время на проходящего мимо ламера. |
|
Последний раз редактировалось more_than_hater, 29-04-2021 в 17:20. Отправлено: 17:10, 29-04-2021 | #23 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать more_than_hater, все гораздо проще - я в массиве два раза ковыряюсь
![]() |
Отправлено: 17:25, 29-04-2021 | #24 |
fascinating rhythm Сообщения: 6705
|
Профиль | Отправить PM | Цитировать Цитата more_than_hater:
![]() Цитата more_than_hater:
То же и с расширением при упаковке. PS7 пофигу, какое расширение файла будет при упаковке, а PS5.1 ругается и требует, чтобы это обязательно было .zip, из-за этого пришлось дополнительно дописывать процедуру переименования. |
||
------- Отправлено: 17:48, 29-04-2021 | #25 |
Старожил Сообщения: 193
|
Профиль | Отправить PM | Цитировать Цитата more_than_hater:
cls $ext = "*.apk" #Set-Location "D:\Основная_папка" ForEach($dir in Get-ChildItem -Directory){ $files = (Get-ChildItem $dir -Filter $ext -file).BaseName $name = $files|Where{"$_".StartsWith($dir)}|select -First 1 if($name -and !(Test-Path "$name.apps")){ Compress-Archive $dir\$ext "$name.zip" -compress Fastest Rename-Item "$name.zip" "$name.apps" } } Для понимания кода просто переводите слова на русский ![]() Например: Get-ChildItem $dir -Filter $ext -file = получи дочерние объекты в $dir по фильтру $ext -только файлы. |
|
Последний раз редактировалось Fors1k, 29-04-2021 в 18:40. Отправлено: 18:32, 29-04-2021 | #26 |
Новый участник Сообщения: 11
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
![]() Цитата DJ Mogarych:
Цитата Fors1k:
|
|||
Отправлено: 20:47, 29-04-2021 | #27 |
fascinating rhythm Сообщения: 6705
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 09:05, 30-04-2021 | #28 |
Новый участник Сообщения: 11
|
Профиль | Отправить PM | Цитировать Господа, приветствую еще раз.
Возникла потребность модифицировать скрипт написанный Вами ранее. Каждая из папок может содержать как старые файлы, так и один единственный файл Самый сложный случай: Если в папке находится несколько файлов с разной датой (день) - то выбирать только самые новые файлы для дальнейшей работы с ними. Если таких файлов несколько (день) - то архивировать их и все так-же переиминовывать архив в .xxx Если такой файл один (день) - то не архивировать его, а просто копировать в ту же папку, где запускается текущий скрипт. Т.е., нужно добавить проверку по дате (newest per day) и по кол-ву файлов внутри этой самой даты. Заранее спасибо. |
Отправлено: 15:14, 27-05-2021 | #29 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Определение суммарного объема файлов определенного типа | kelevara | Скриптовые языки администрирования Windows | 16 | 02-05-2013 20:55 | |
VBS/WSH/JS - Копирование файлов из каталогов и подкаталогов с сохранением структуры подкаталогов | spke | Скриптовые языки администрирования Windows | 0 | 10-04-2013 23:58 | |
CMD/BAT - [решено] Выбор определенного типа файлов при копировании | Aleksander.Ruban@fb | Скриптовые языки администрирования Windows | 4 | 25-08-2012 10:21 | |
Log/Monitoring - Запрет на запись файлов определенного типа и размера | andrei.ru | Сетевые технологии | 1 | 20-11-2009 11:53 | |
скачивание файлов определенного типа | NIGHT_ANGEL | Хочу все знать | 11 | 25-02-2005 06:41 |
|