Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230

Открыть новую тему     Написать ответ в эту тему

KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Старые и смежные темы: по CMD и в Программах | по PowerShell | В помощь системному администратору | Прикладное программирование

PowerShell
Версии | Ассоциация и подпись сценариев
Сценарий для ассоциации файлов PowerShell и запуска неподписанных скриптов.
 
Прочее
Расширение возможностей
Функции
Write-Color
Output-DebugString
Провайдеры
Готовые скрипты
Полезные ссылки | Будет ли репозиторий PowerShell на ru-board?
Книги в PDF
Cheat Sheets
 

Cmd
Для перекодирования кириллицы 866<—>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы
 
Готовые решения и частые вопросы
 
Описания работы команд и символов участниками темы:
setlocal enabledelayedexpansion и переменные окружения
символы & и && в командной строке
Переменная %0
 
Полезные ссылки и утилиты

WSH (VBScript, JScript)
Программирование "удобняшек" на VBScript

Примечания:
• Большие куски кода заключайте в тэг [ more ]
• Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте код без пробелов иначе сценарий может работать неправильно. Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
• Сторонние консольные утилиты можно использовать только в виде готового решения и только в рамках сценариев. Никаких обсуждений и обучений работе с утилитами не предусмотрено и прямо запрещено правилами топика.
Шапка и около-темные вопросы |

Всего записей: 11450 | Зарегистр. 12-10-2001 | Отправлено: 13:40 17-02-2018 | Исправлено: YuS 2, 08:24 19-06-2021
pressF



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
в общем не получилось у меня за пару вечеров нагуглить (а гуглил я мощно) ничего по команде tree
 
оставил такой вариант Get-ChildItem | tree /f > tree.log
и по-прежнему необходимо формировать внизу кол-во папок и файлов и нужно как-то имя родительской памяти подставлять вместо точки. ну и избавиться от мусора в первых строках вроде номера диска.
кстати кодировка у лога получается UTF-16 LE. почему так?
 
вот такой вывод содержимого папки с раскраской
https://github.com/posh-projects/Tree
https://www.powershellgallery.com/packages/Tree/1.0.1
здесь мне не удалось записать вывод используя Get-ChildItemTree | Out-File D:\12345.txt
и хочется чтобы сначала шли папки и за ними файлы в алфавитном порядке. может это поможет для решения? https://github.com/LarrysGIT/Powershell-Natural-sort
 
и ещё если вы не можете запустить скрипт почитайте тут https://ru.stackoverflow.com/questions/935212/powershell-%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D1%86%D0%B5%D0%BD%D0%B0%D1%80%D0%B8%D0%B5%D0%B2-%D0%BE%D1%82%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%BE-%D0%B2-%D1%8D%D1%82%D0%BE%D0%B9-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B5
мне помогло
 
экспорт древовидного списка в excel
https://www.alphr.com/export-folder-structure-to-excel/
 
экспорт древовидного списка в html, вот это прям точное решение
https://key2consulting.com/powershell-file-directory-tree-view/
доработать отображения можно как угодно. это хмтл файл
 
В будущем хочу попробовать настроить фоновое отслеживания изменении в каталоге, формирование нового выходного хтмл, пуш этого файла в репозитории гитхаба.
А может уже решали задачу и есть готовый вариант?)

Всего записей: 1315 | Зарегистр. 29-03-2023 | Отправлено: 12:53 22-06-2023
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pressF
Цитата:
по-прежнему необходимо формировать внизу кол-во папок и файлов

Например:
PowerShell:
Код:
[IO.DirectoryInfo] $Path = 'C:\Users\User\Documents\WindowsPowerShell'
 
if (!$Path.Exists) { Write-Error -Message "$Path - путь не найден!!!" }
 
$fileTree = Join-Path -Path $Path.Parent -ChildPath ($Path.BaseName + '.tree')
$dirlist  = dir $Path -Recurse
$dirCount = ($dirlist | ? Attributes -eq Directory).Count
$fMeasure = $dirlist | ? Attributes -ne Directory | measure -Sum Length
 
tree /F $Path | select -Skip 2 | Out-File -Encoding utf8 $fileTree
 
Add-Content -LiteralPath $fileTree -Value " Папок: $dirCount"
Add-Content -LiteralPath $fileTree -Value "Файлов: $($fMeasure.Count)"
Add-Content -LiteralPath $fileTree -Value "Размер: $($fMeasure.Sum)"
Add-Content -LiteralPath $fileTree -Value "Размер: $([Math]::Round($fMeasure.Sum/1MB, 3)) Мб"

Всего записей: 3650 | Зарегистр. 16-08-2012 | Отправлено: 19:33 22-06-2023
pressF



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
ошибку выдаёт https://i.postimg.cc/d1JVN8tK/powershell-ise-Ta-AOs4-LB80-2023-06-24-08-17-29.png

Всего записей: 1315 | Зарегистр. 29-03-2023 | Отправлено: 04:19 24-06-2023
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pressF
Цитата:
ошибку выдаёт

FullName не хватает.
Замените строчку: $fileTree = …
на
Код:
$fileTree = Join-Path -Path $Path.Parent.FullName -ChildPath ($Path.Name + '.tree')

или прямо укажите путь для сохранения файла:

Код:
$fileTree = 'D:\Fonts\AlfaBravo.tree'

 
пример.0.5

Код:
[IO.DirectoryInfo] $Path = 'C:\Users\User\Documents\WindowsPowerShell'
 
if (!$Path.Exists) { Write-Error -Message "$Path - путь не найден!!!" }
 
$fileTree = Join-Path -Path $Path.Parent.FullName -ChildPath ($Path.Name + '.tree')
$dirlist  = dir $Path -Recurse
$dirCount = ($dirlist | ? Attributes -eq Directory).Count
$fMeasure = $dirlist | ? Attributes -ne Directory | measure -Sum Length
 
tree /A /F $Path | select -Skip 2 | Out-File -Encoding ascii $fileTree
 
Add-Content -LiteralPath $fileTree -Value " Папок: $dirCount`nФайлов: $($fMeasure.Count)`nРазмер: $([Math]::Round($fMeasure.Sum/1MB, 3)) Мб"
Notepad.exe $fileTree

Всего записей: 3650 | Зарегистр. 16-08-2012 | Отправлено: 18:52 24-06-2023
BOA_KAA



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
pressF
 
Коллеги, ну тогда здесь:
 
tree /A /F $Path | select -Skip 2 | Out-File -Encoding ascii $fileTree  
 
избавьтесь вообще от параметра "-Encoding ascii", или замените на "-Encoding utf8" чтобы с кодировкой проблем не было, а то наш великий и могучий русский язык тогда при выводе хромает.
 
P.S. Ну и в проверке пути на существование не лишне будет добавить выход, а то нелогично как-то получается:
 
if (!$Path.Exists) { Write-Error -Message "$Path - путь не найден!!!"; return -1}

Всего записей: 310 | Зарегистр. 01-12-2004 | Отправлено: 23:45 02-07-2023
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BOA_KAA, в первом моём примере, кодировка итак utf8, демо самой возможности смены кодировки. Во втором примере лог открывается в блокноте, есть проблемы с отображением в блокноте?
Write-Error — справедливо. Но это потому, что в пример не вошло $ErrorActionPreference = 'STOP'
 

Всего записей: 3650 | Зарегистр. 16-08-2012 | Отправлено: 01:11 03-07-2023
BOA_KAA



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
 
Да, при указанном флаге "-Encoding ascii" вместо русского получаем "???"
 
E:\DEBIAN
|   firmware-11.6.0-amd64-DVD-1.iso
|   ...
|   rufus-3.20p.exe
|   rufus.ini
|   ????? ????.txt
|   ...
 
А в остальном, полностью поддерживаю

Всего записей: 310 | Зарегистр. 01-12-2004 | Отправлено: 08:45 03-07-2023
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BOA_KAA, интересно, а там у Вас что?
 
апплет Регион: rundll32.exe Shell32.dll, Control_RunDLL Intl.cpl,,1
 


Всего записей: 3650 | Зарегистр. 16-08-2012 | Отправлено: 13:21 03-07-2023
pressF



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21

Цитата:
Замените строчку: $fileTree = …

работает
 
а почему один пробел перед строкой добавляет?
 
 
Добавлено:
и вот ещё обнаружил что обрезает первые буквы
 

Всего записей: 1315 | Зарегистр. 29-03-2023 | Отправлено: 15:13 03-07-2023
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pressF, пробел, потому, что он там есть, если не нужен, уберите, сразу после первой кавычки.
" Папок: $dirCount`nФайлов: $($fMeasure.Count)`nРазмер: $([Math]::Round($fMeasure.Sum/1MB, 3)) Мб"
Не знаю, что там обрезает, у меня не обрезает, на первом Вашем скрине тоже не обрезает.

Всего записей: 3650 | Зарегистр. 16-08-2012 | Отправлено: 18:23 03-07-2023
pressF



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Ну вот сейчас хорошо.
Я не знаю почему обрезал, сейчас не обрезает.
А то что папок 0 это потому что он подпапки не учитывает? У меня есть 2 папки внутри так-то

Всего записей: 1315 | Зарегистр. 29-03-2023 | Отправлено: 21:02 03-07-2023
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pressF

Цитата:
А то что папок 0 это потому что он подпапки не учитывает? У меня есть 2 папки внутри так-то

это хорошо, что заметили это ошибка! фича
 
пример.0.7 исправление ошибок, рефакторинг, бла-бла. Уже замахнёмся на скрипт
TreePlus.ps1
Код:
param (
    # По умолчанию работает с текущей директорией.
    [Parameter(ValueFromPipeline)]
    [ValidateScript({ Test-Path -LiteralPath $_ -PathType Container })]
    [IO.DirectoryInfo] $Path = $PWD.Path
)
 
$dirlist   = Get-ChildItem -Force -Recurse -LiteralPath $Path
$dirOnly   = $dirlist | Where-Object -Property Attributes -Match Directory
$dirCount  = if ($dirOnly) { $dirOnly.Count } else { 0 }
$fMeasure  = $dirlist | Where-Object -Property Attributes -NotMatch Directory | Measure-Object -Sum Length
$fileCount = if ($fMeasure) { $fMeasure.Count } else { 0 }
$fileSize  = if ($fMeasure) { "$([Math]::Round($fMeasure.Sum/1MB, 3)) Mb" } else { "0 Mb" }
 
$OutputEncodingBackup = [Console]::OutputEncoding
[console]::OutputEncoding = [Text.Encoding]::GetEncoding(1251)
 
tree /A /F $Path | Select-Object -Skip 2
 
[console]::OutputEncoding = $OutputEncodingBackup
 
"Папок: $dirCount, Файлов: $fileCount, Размер: $fileSize"

Думаю не стоит запускать в корне диска…  
Пример вызова в консоли PowerShell: К:\Скрипту\Путь\TreePlus.ps1 -Path К:\Директории\Нужной\Путь\
или в лог: К:\Скрипту\Путь\TreePlus.ps1 -Path К:\Директории\Нужной\Путь\ | Out-File -LiteralPath 'К:\логу путь\tree.log'

Всего записей: 3650 | Зарегистр. 16-08-2012 | Отправлено: 21:55 03-07-2023
BOA_KAA



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
 
Точно также как у Вас, один в один .
PwS 7.3.5

Всего записей: 310 | Зарегистр. 01-12-2004 | Отправлено: 22:57 03-07-2023
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BOA_KAA
Цитата:
PwS 7.3.5  
из за версии пошика, да.
а выше с GetEncoding(1251) норм?
 
как бы это магическое число (1251) получать из системы?
[console]::OutputEncoding.WindowsCodePage — оно?

Всего записей: 3650 | Зарегистр. 16-08-2012 | Отправлено: 23:35 03-07-2023
ExDimanya



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21В батнике ASPS вроде есть настройка языка.


----------
Клон полезняшек от Ratiborus
Телеграм
Sic transit gloria mundi

Всего записей: 13311 | Зарегистр. 19-04-2018 | Отправлено: 23:43 03-07-2023
BOA_KAA



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
 
Удивительное рядом.
 
Тот код, которые есть сейчас выдал вот это:
 
E:\DEBIAN
|  ...
+---Rufus
|   |   rufus.log
|   \---syslinux-6.04
|       |   ...
|       \---20200816
|               ldlinux.bss
|               ldlinux.sys
\---Љ в «®Ј - §ў - Ї®-агббЄЁ
        € д ©« Ї®-агббЄЁ.txt
 
А комментирование строк установки кодировки, до tree, и после, дают следующее:
 
E:\DEBIAN
| ...
+---Rufus
|   | ...
|   \---syslinux-6.04
|       | ...
|       \---20200816
|               ldlinux.bss
\---Каталог назван по-русски
        И файл по-русски.txt
 
Чудеса в решете короче. Почему tree чудит, или консольный вывод, не ясно. Ну и пёс с ним. Главное чтобы у человека всё работало.

Всего записей: 310 | Зарегистр. 01-12-2004 | Отправлено: 09:11 04-07-2023
pressF



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21

Цитата:
пример.0.7 исправление ошибок, рефакторинг, бла-бла. Уже замахнёмся на скрипт

Посмотрю позже.
 
Хочу одно интересное решение чтобы получилось. Для винды я такое не встречал а вот на MacOS использую.

Всего записей: 1315 | Зарегистр. 29-03-2023 | Отправлено: 17:38 05-07-2023
pressF



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может есть готовый вариант получения хэш суммы файла и с добавлением в контекстное меню?
 
Я применил один скрипт и у меня он в таком варианте не сработал
 

Код:
Windows Registry Editor Version 5.00
 
[HKEY_CURRENT_USER\Software\Classes\*\shell\gethash]
@="Get File Hash"
 
[HKEY_CURRENT_USER\Software\Classes\*\shell\gethash\command]
@="powershell -WindowStyle Minimized -Command Get-FileHash -Path '%1' -Algorithm SHA512 | fl | clip"

 
из недостатков:
если путь содержит кириллицу на выходе получаются иероглифы
среди выделенных файлов только для одного расчитывает
открывается множество окон
формат вывода не соответствует условиям
 
Нужно получить данные в таком виде
 
Информация о файле
 
Имя файла: 12345.exe
Размер файла: 3366400 B [3.37 MB | 3.21 MiB]
Хэш-сумма (SHA512): 39d6ff942c2d4fff6074e550fabe970067ab762260293787c9bc


Почему когда вставляешь из текстового редактора строку например Get-ChildItem -Path D:\cr -Recurse | Get-FileHash SHA512 в консоли обрезаются первые буквы у Get?
 
Почему конвеер(мне больше нравится последовательность) не получается?
PS C:\Windows\system32> Get-ChildItem -Path D:\cr | Get-FileHash SHA512
Get-FileHash : Не удается привязать объект ввода к любым параметрам команды, так как команда не принимает входные данные ко
нвейера, либо входные данные и их свойства не совпадают с любыми из параметров, принимающих входные данные конвейера.
В моей логике полученный список файлов команда Get-FileHash ДОЛЖНА принимать. Ну нет никаких препятствии.
 
Как можно убрать из выходного файла служебную информацию?
Имя диска и серийный номер после выполнения команды
Get-ChildItem | tree /f > tree.log
Также в логе сам файл почему-то присутствует. Выглядит странно. Ведь создаётся структура УЖЕ СУЩЕСТВУЮЩИХ файлов.
 
Что даёт $stream?

Цитата:
Мы можем загружать большие файлы не целиком, а частями

Всего записей: 1315 | Зарегистр. 29-03-2023 | Отправлено: 10:40 07-07-2023
greeple

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pressF
Цитата:
Может есть готовый вариант получения хэш суммы файла и с добавлением в контекстное меню?

получить хэш

Всего записей: 5560 | Зарегистр. 11-02-2020 | Отправлено: 20:18 07-07-2023
pressF



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Нужно получить данные в таком виде

Почти решил https://kwanmo.wordpress.com/2019/11/14/recursive-file-hash-powershell-version/
осталось размер файла найти как сделать нужным и в начало добавить строку что это информация о файле
 
greeple
ничем не отличается от моего варианта
даже хуже

Всего записей: 1315 | Зарегистр. 29-03-2023 | Отправлено: 09:46 08-07-2023
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru