|
Компьютерный форум 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 |
Новый участник Сообщения: 11
|
Профиль | Отправить PM | Цитировать Elven,
Подправил расширения и уменьшил кол-во символов для удаления до 4-х. Скрытый текст
Get-ChildItem -Directory | ForEach-Object { if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Property Length -descending | select -First 1).BaseName.Remove(6)) { $archive_name = (Get-ChildItem $_/*.apk | Sort-Object -Property Length -descending | select -First 1).BaseName + ".zip" if (!(Test-Path $archive_name -PathType Leaf)) { (Get-ChildItem $_/*.apk).FullName | Compress-Archive -DestinationPath ./$archive_name } else { Write-Host "Уже есть такой файл: $archive_name " } } else { Write-Host "Не совпадают в $_" } } Выдаваемая ошибка: Скрытый текст
PS C:\Users\penky> C:\Users\penky\Documents\Raccoon\content\apps\test.ps1 Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Исключение при вызове "Remove" с "1" аргументами: "startIndex должен быть меньше, чем длина строки. Имя параметра: startIndex" C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : ArgumentOutOfRangeException Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Не совпадают в Documents Не совпадают в Downloads Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Невозможно вызвать метод для выражения со значением NULL. C:\Users\penky\Documents\Raccoon\content\apps\test.ps1:2 знак:7 + if ($_.name.remove(4) -eq (Get-ChildItem $_/*.apk | Sort-Object -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Структура основной папки и пример подпапки (во всех подпапках примерно также): Скрытый текст
![]() |
Отправлено: 20:33, 28-04-2021 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать надо было сразу так сделать...
$mask = "*.apk" $count = 4 Get-ChildItem -Directory | ForEach-Object { if ($_.name.remove($count) -eq (Get-ChildItem $_/$mask | Sort-Object -Property Length -descending | select -First 1).BaseName.Remove($count)) { $archive_name = (Get-ChildItem $_/$mask | Sort-Object -Property Length -descending | select -First 1).BaseName + ".zip" if (!(Test-Path $archive_name -PathType Leaf)) { (Get-ChildItem $_/$mask).FullName | Compress-Archive -DestinationPath ./$archive_name } else { Write-Host "Уже есть такой файл: $archive_name " } } else { Write-Host "Не совпадают в $_" Write-Host $archive_name } } и если снова не запустится - вывод куда-нибудь сюда. |
Отправлено: 21:53, 28-04-2021 | #12 |
Старожил Сообщения: 193
|
Профиль | Отправить PM | Цитировать Elven, зачем выполнять 3 раза подряд команду Get-ChildItem $_/$mask?
|
Последний раз редактировалось Fors1k, 29-04-2021 в 03:07. Отправлено: 01:49, 29-04-2021 | #13 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать Fors1k, ну а как это обычно получается? Дернул один раз - ради этого в переменную загонять как-то... зачем? после этого заметил что еще раз нужно. Потом переписал скрипт еще три раза и забил на это
![]() |
Отправлено: 08:05, 29-04-2021 | #14 |
Новый участник Сообщения: 11
|
Профиль | Отправить PM | Цитировать Elven, скрипт отлично работает, но есть две проблемки.
1. При замене .zip на .yyy - как я понял из поста Fors1k, можно дообавить команду ren для последующего переименования. Тут ок. Скрытый текст
Compress-Archive : .apps — неподдерживаемый формат файла архива. .zip — единственный поддерживаемый формат файла архи ва. C:\Users\admin\Documents\Raccoon\content\apps\test3.ps1:8 знак:45 + ... _/$mask).FullName | Compress-Archive -DestinationPath ./$archive_name + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (.apps:String) [Compress-Archive], IOException + FullyQualifiedErrorId : NotSupportedArchiveFileExtension,Compress-Archive 2. В некоторых случаях (папка-файл), нужно отрезать более 11 символов, но не все (папка-файл) имеют такую длинну. Скрытый текст
Исключение при вызове "Remove" с "1" аргументами: "startIndex должен быть меньше, чем длина строки. Имя параметра: startIndex" C:\Users\admin\Documents\Raccoon\content\apps\test3.ps1:5 знак:7 + if ($_.name.remove($count) -eq (Get-ChildItem $_/$mask | Sort-Objec ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : ArgumentOutOfRangeException Есть возможность делать проверку не обрезая длинну, а взяв первые Х символов? P.S. Цитата Elven:
|
|
Последний раз редактировалось more_than_hater, 29-04-2021 в 10:15. Отправлено: 09:10, 29-04-2021 | #15 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать 1. линуксовый posh не такой капризный - жрет что дали
![]() 2. не проще тогда искать название папки в названии файла (опять же см. ниже)? $aext = "*.ps1" $rext = ".yyy" Get-ChildItem -Directory | ForEach-Object { $archive_name = (Get-ChildItem $_/$mask | Sort-Object -Property Length -descending | select -First 1).BaseName if ($archive_name -match $_.name) { if (!(Test-Path "$archive_name*" -PathType Leaf)) { (Get-ChildItem $_/$mask).FullName | Compress-Archive -DestinationPath ./$archive_name.zip Rename-Item "$archive_name.zip" "$archive_name$rext" } else { Write-Host "Уже есть такой файл: $archive_name " } } else { Write-Host "Не совпадают имена" Write-Host $archive_name != $_.Name } } |
Последний раз редактировалось Elven, 29-04-2021 в 10:05. Отправлено: 10:00, 29-04-2021 | #16 |
Новый участник Сообщения: 11
|
Профиль | Отправить PM | Цитировать Elven , Отлично работает, спасибо!
1. Дополнительный вопрос. Можем ли модернизировать скрипт на использование 7z? Конкретно сейчас нужды в этом нет, но в будущем... Попытался внести правки в код: Скрытый текст
$mask = "*.apk" $rext = ".yyy" $env = "C:/Program Files/7-Zip" Get-ChildItem -Directory | ForEach-Object { $archive_name = (Get-ChildItem $_/$mask | Sort-Object -Property Length -descending | select -First 1).BaseName if ($archive_name -match $_.name) { if (!(Test-Path "$archive_name*" -PathType Leaf)) { (Get-ChildItem $_/$mask).FullName | Start-Process -FilePath "$env/7zG.exe" -a -tzip "./$archive_name$rext" } else { Write-Host "Уже есть такой файл: $archive_name " } } else { Write-Host "Не совпадают имена" Write-Host $archive_name != $_.Name } } Но правки встречают меня ошибкой: Скрытый текст
Start-Process : Не удается найти позиционный параметр, принимающий аргумент "./air.au.com.metro.DumbWaysToDie2-500001 1.yyy". C:\Users\admin\Documents\Raccoon\content\apps\compress_apps_7z.ps1:9 знак:43 + ... .FullName | Start-Process -FilePath "$env/7zG.exe" -a -tzip "./$archi ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand Подскажите, как правильно внести правку? 2. В продолжение смежной темы "сравнение названий" Т.к. у нас в скрипте все-еще идет отборка по размеру файла - попадаются ситуации, когда самый крупный по размеру файл в подпапке - не является нужным. Можем отказаться от сравнения с самым крупным файлом в подпапке и сравнивать имя каждого файла в подпапке с именем самой подпапки? Параллельно изучаю скрипт Ув. Fors1k. Я так понял - у него происходит примерно то, что написал ранее. Скрытый текст
![]() P.S. Код Ув.Fors1k также работает отлично, спасибо! |
Последний раз редактировалось more_than_hater, 29-04-2021 в 11:43. Отправлено: 11:05, 29-04-2021 | #17 |
fascinating rhythm Сообщения: 6650
|
Профиль | Отправить PM | Цитировать Ещё вариант
$dir = "D:\temp" $ext = "*.txt" dir "$dir" -Directory |? {[System.IO.Directory]::EnumerateFiles("$($_.fullname)", "$ext", "Alldirectories")} |% { $name = (dir "$($_.fullname)" -Include "$ext" -File -Recurse -OutVariable files |sort length |select -Last 1).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$","yyy") } |
------- Последний раз редактировалось DJ Mogarych, 29-04-2021 в 13:31. Причина: исправил для v5 Отправлено: 11:57, 29-04-2021 | #18 |
Новый участник Сообщения: 11
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
Скрытый текст
Исключение при вызове "EnumerateFiles" с "3" аргументами: "Не удалось найти часть пути "C:\Users\admin\com.adobe.read er"." C:\Users\admin\Documents\Raccoon\content\test_apps\test.ps1:4 знак:27 + ... rectory |? {[System.IO.Directory]::EnumerateFiles("$_", "$ext", "Alld ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : DirectoryNotFoundException |
|
Отправлено: 13:15, 29-04-2021 | #19 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать Цитата more_than_hater:
Цитата more_than_hater:
Цитата Elven:
![]() $aext = "*.xxx" $rext = ".yyy" Get-ChildItem -Directory | ForEach-Object { $fnames = (Get-ChildItem $_/$mask).BaseName if ($fnames -match $_.name) { $tf = $_.Name $fnames.ForEach{ if ($PSItem -match $tf) { $archive_name = $PSItem } } if (!(Test-Path "$archive_name*" -PathType Leaf)) { (Get-ChildItem $_/$mask).FullName | Compress-Archive -DestinationPath ./$archive_name.zip Rename-Item "$archive_name.zip" "$archive_name$rext" } else { Write-Host "Уже есть такой файл: $archive_name " } } else { Write-Host "Не совпадают имена" Write-Host $archive_name != $_.Name } } |
|||
Отправлено: 13:20, 29-04-2021 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|