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

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

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

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

Maz



Дед Мазай
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
часть 1 | часть 2 | часть 3 | часть 4 | часть 5
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!! Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте батник без пробелов.
 
Примечание: Большие куски кода заключайте в тэг [ more ].  

Смежные темы:
В помощь системному администратору > Автоматизация администрирования
Microsoft Windows > Сценарии Windows

Полезные ссылки:
· Из Windows XP Professional Product Documentation:
> Описание Cmd.exe > Command shell overview
> Using batch files > Using batch parameters > Using filters > Using command redirection operators
 
· Уроки bat-аники (для начинающих): первый и второй
· Курс из 19 лекций "Командная строка и сценарии Windows"
· Уильям Р. Станек - Командная строка Windows. Справочник администратора
 
· Выполнение BAT-скриптов без вызова окна консоли
· cmdow - изменение параметров и видимости дос-окна, Статья в КОМПЬЮТЕРРАONLINE
· Набор GNU утилит для win32
· HS_Packet.7z - Пакет утилит для организации интерфейса в bat-файлах
· blat - отправка почты из консоли
· Easy Batch Builder+Rus+Crack - Редактор BAT файлов.Через графический интерфейс программы вы сможете быстро конструировать пакетные файлы практически любой сложности. (В комплекте есть Лоадер созданный с помощью Sign Of Misery некоторые антивирусы обзывают его вирусом. Вам решать: ставить или не ставить) (ЗЕРКАЛО)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек) ещё и ещё
· Переход из 32-битной версии cmd.exe в 64-битную (1) (2)(3)
 
· Архив всевозможных версий cmd.exe (от Windows NT 3.10 до Windows 11 +Win95cmd +ReactOS) и command.com (DOS 5.0 и выше). Старые командные процессоры можно запускать на более новых ОС, хотя не всё может работать корректно. Подробная документация по командам cmd.exe и стандартным утилитам ОС для NT 3.51, NT 5.0 (Windows 2000) и NT 5.2 (Windows Server 2003). Сборник представляет исторический интерес, а также незаменим для тех, у кого появилось желание сделать свои скрипты работоспобными не только на своей версии ОС.
 
· Большой сборник одним архивом: Сотни Win32 утилит командной строки, нетривиальные .cmd файлы, .bat miniperl скрипты (не требующие полноценной установки Perl), FAR Manager с плагинами и настройками, разное для DOS/DOSBox (откуда под Win32 интерес представляют три продвинутых "мультисистемных" .bat файла да ещё, может быть, оболочка Necromancer DOS Navigator с поддержкой LFN и доступом к буферу обмена Windows). Краткие описания всего - в файликах files.bbs

Всего записей: 38836 | Зарегистр. 26-02-2002 | Отправлено: 13:35 19-09-2020 | Исправлено: metatrop, 07:55 29-11-2022
los

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

Цитата:
может в powershell есть какой вариант, чтобы удобнее это сделать

https://stackoverflow.com/questions/55355466/7z-list-only-filenames
 
P.S.
Не проще ли использовать tar или 7z+sed?

Всего записей: 7336 | Зарегистр. 08-09-2001 | Отправлено: 17:44 20-07-2023
greeple

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
los
Цитата:
Не проще ли использовать tar или 7z+sed?

наверно не проще
 

Код:
tar -t "C:\Users\greeple\Downloads\irfanview_lang_russian.zip"
tar: Error opening archive: Failed to open '\\.\tape0'

 
не знаю что конкретно ты мне давал по ссылке на стак, но вот этот модуль оттуда делает то что надо, установил и вот так
(Get-7Zip -ArchiveFileName "C:\Users\greeple\Downloads\irfanview_lang_russian.zip").FileName
выдаёт то что надо
и вот этот скрипт

Код:
$ix=-1;
$body=$false;
 
& 7z l your-file.7z | foreach { `
    if ($ix -eq -1) {`
        $ix = $_.IndexOf("Name");`
    }`
    $p = $body;`
    if ($ix -gt 0) {`
        # The table body is delimited by dashed lines, after the "Name" column header has been seen`
        $body = ($body -ne ($_ -match ' *-[ -]+'))
    }`
    if ($p -and $body) {`
        # Only print if "body" was 1 before and after the previous block; otherwise, we are in`
        # the table body delimiter line (or outside the table completely)`
        write-output $_.Substring($ix)`
    }`
}

а нельзя эти переменные первые прописать сразу в код? и без проверок if ($ix -eq -1) я что то упускаю? ну ладно не суть, работают, хотел этот код в реестр прописать, ну тогда ладно, с тем модулем тоже можно
ну и вот такой вариант да

Код:
@Echo Off
  REM Sending the output of 7z into a file to use later
  "%ProgramFiles%\7-Zip\7z.exe" l -slt "C:\Users\greeple\Downloads\irfanview_lang_russian.zip" >"ZipListRAW.txt"
   
  REM Example of 7z.exe command with '-ba' switch
  REM 7z.exe l -ba -slt "SomeFileIZipped.zip"
   
  REM If you do not use '-ba' in the 7z command above, you can simply skip the first
  REM 11-12 lines of the file to get ONLY the filenames (skips past first line containing
  REM "Path" which contains the original archive filename.
   
  For /f "Usebackq Skip=11 Tokens=1,3* Delims= " %%a in ("ZipListRAW.txt") do (
    REM Checking if %%a equals word "Path"
    If "%%a"=="Path" (
      If [%%c]==[] (
        Echo %%b
      ) ELSE (
        Echo %%b %%c
      )
    )
  )
pause>nul

ладно разберусь, всем спасибо
 
Добавлено:
1 вопрос ещё, а тут можно в последнем примере, вместо txt передать конвейером | вывод в цикл %%a in ("ZipListRAW.txt") ?

Всего записей: 4252 | Зарегистр. 11-02-2020 | Отправлено: 19:03 20-07-2023 | Исправлено: greeple, 19:05 20-07-2023
los

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

Цитата:
наверно не проще

Когда не знаешь как пользоваться, то не проще.
tar tf foo.zip  

Всего записей: 7336 | Зарегистр. 08-09-2001 | Отправлено: 20:38 20-07-2023
greeple

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

Цитата:
Когда не знаешь как пользоваться

так просвети, а что добавить чтобы в 7z архивы заглядывал?
tar: LZMA codec is unsupported
tar: Error exit delayed from previous errors.


Всего записей: 4252 | Зарегистр. 11-02-2020 | Отправлено: 22:35 20-07-2023
sakatgg

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имеется большой Components.reg и список кустов list.txt, которые только нужны, т.е. нужно получить маленький Components2.reg.
Подскажите, как справиться с задачей. Спасибо
 
Components.7z
 
greeple
А если 100 или 1000? Для примера список кустов list.txt не большой
Тем более ручками есть вероятность ошибки, а это критично очень.

Всего записей: 1119 | Зарегистр. 18-11-2006 | Отправлено: 23:26 20-07-2023 | Исправлено: sakatgg, 23:56 20-07-2023
greeple

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sakatgg
не такой уж он и большой, там можно руками их взять и скопировать во второй

Всего записей: 4252 | Зарегистр. 11-02-2020 | Отправлено: 23:36 20-07-2023
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
greeple
Цитата:
по умолчанию 7z выдаёт таблицу по такому запросу листинга https://i.imgur.com/8jJGA5M.png
"%ProgramFiles%\7-Zip\7z.exe" l архив.зип  
мне нужно чтобы выдавало только последний столбец с name  

Цитата:
и вот этот скрипт
 
Код:
$ix=-1;
$body=$false;
 
& 7z l your-file.7z | foreach { `
    if ($ix -eq -1) {`
        $ix = $_.IndexOf("Name");`
    }`
    $p = $body;`
    if ($ix -gt 0) {`
        # The table body is delimited by dashed lines, after the "Name" column header has been seen`
        $body = ($body -ne ($_ -match ' *-[ -]+'))
    }`
    if ($p -and $body) {`
        # Only print if "body" was 1 before and after the previous block; otherwise, we are in`
        # the table body delimiter line (or outside the table completely)`
        write-output $_.Substring($ix)`
    }`
}  

 
типа такого (.zip => CompressedFolder):

Код:
Windows Registry Editor Version 5.00
 
[HKEY_CLASSES_ROOT\CompressedFolder\Shell\CopyFileList]
"MUIVerb"="Копировать список файлов из архива"
 
[HKEY_CLASSES_ROOT\CompressedFolder\Shell\CopyFileList\Command]
@="powershell.exe -c \"$ix=-1; $body=$false; 7z.exe l '%1' | foreach{if ($ix -eq -1) {$ix = $_.IndexOf('Name')}; $p=$body; if ($ix -gt 0) {$body=($body -ne ($_ -match ' *-[ -]+'))}; if ($p -and $body) {$_.Substring($ix)}}|Set-Clipboard\""


Всего записей: 3521 | Зарегистр. 16-08-2012 | Отправлено: 01:07 21-07-2023 | Исправлено: iNNOKENTIY21, 01:17 21-07-2023
greeple

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
только у меня на этой папке не появляется на зипах меню
может из за того что удалил [-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.zip\CompressedFolder\ShellNew] чтобы не было в меню создать сжатой папки
может из за того что winrar стоит по умолчанию для них
пока сюда не прописал не появилось WinRAR.ZIP
но пока не получилось, то одна ошибка, то другая

Код:
строка:1 знак:55
+ $ix=-1; $body=$false; 'C:\Program Files\7-Zip\7z.exe' l 'C:\Users\gree ...
+                                                                                ~
Непредвиденная лексема "l" в выражении или операторе.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

ладно как нибудь разберусь, просто не понятно было как в одну строку это правильно написать, кавычки и прочие вот эти вещи уже дело второе
у тебя то он работает в контекстном меню?

Всего записей: 4252 | Зарегистр. 11-02-2020 | Отправлено: 02:22 21-07-2023 | Исправлено: greeple, 02:24 21-07-2023
iNNOKENTIY21



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

Цитата:
у тебя то он работает в контекстном меню?

Работает.
 
https://www.upload.ee/files/15476954/capture-screen.mp4.html

Всего записей: 3521 | Зарегистр. 16-08-2012 | Отправлено: 02:42 21-07-2023
greeple

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
добавил сюда &  
$false; & 7z.exe l '%1' |
эта ошибка пропала, но теперь  

Код:
Set-Clipboard : Сбой при выполнении запрошенной операции с буфером обмена.
строка:1 знак:278
+ ... ' *-[ -]+'))}; if ($p -and $body) {$_.Substring($ix)}}| Set-Clipboard
+                                                                                  ~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: ( [Set-Clipboard], ExternalException
    + FullyQualifiedErrorId : System.Runtime.InteropServices.ExternalException,Microsoft.PowerShell.Commands.SetClipbo
   ardCommand


Всего записей: 4252 | Зарегистр. 11-02-2020 | Отправлено: 02:47 21-07-2023
iNNOKENTIY21



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

Цитата:
строка:1 знак:55
+ $ix=-1; $body=$false; 'C:\Program Files\7-Zip\7z.exe' l 'C:\Users\gree ...  

у тебя там точно L маленькая?

Всего записей: 3521 | Зарегистр. 16-08-2012 | Отправлено: 02:48 21-07-2023
greeple

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
без set-clipboard работает без ошибок, всё выдаёт в консоль, значит всё норм, у меня тут на этом ноуте старом проблема какая то с конвейерами в powershell
всё норм, позже винду переустановлю посмотрю как будет
 
Добавлено:
iNNOKENTIY21
Цитата:
у тебя там точно L маленькая?

да, я первым делом тоже подумал
 
Добавлено:
может вызвать команду powershell из cmd и потом передать в |clip ?

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



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

Цитата:
может вызвать команду powershell из cmd и потом передать в |clip ?

будут проблемы с кодировкой. хотя на вашей винде может и не будет
 
Добавлено:
greeple
а какая получилась строка запуска? экспорт из реестра сделайте.
какая винда, пошик.
"тест строка" | Set-Clipboard | Get-Clipboard
"или алиасы командлетов тест строка" | scb | gcb

Всего записей: 3521 | Зарегистр. 16-08-2012 | Отправлено: 04:00 21-07-2023
Simple Code

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
greeple
 
Если нужно получить список файлов только архива .ZIP, можно обойтись без сторонних утилит.
Обновил. Спасибо за подсказку iNNOKENTIY21

Код:
 
Windows Registry Editor Version 5.00
 
[HKEY_CLASSES_ROOT\CompressedFolder\Shell\CopyFileList]
"MUIVerb"="Скопировать список файлов Zip-архива"
 
[HKEY_CLASSES_ROOT\CompressedFolder\Shell\CopyFileList\Command]
@="powershell.exe -NoP -NoL -NonI -EP Bypass Add-Type -AssemblyName System.IO.Compression.FileSystem; [IO.Compression.ZipFile]::Open('%1', 'Read', [Text.Encoding]::GetEncoding(866)).Entries.FullName | Set-Clipboard;"
 

Всего записей: 172 | Зарегистр. 19-11-2022 | Отправлено: 10:35 21-07-2023 | Исправлено: Simple Code, 11:36 21-07-2023
sakatgg

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
По поводу этой проблемы, если сложно с реализацией, то возможно ли сделать хотя бы так:
Те кусты, что не входят в list.txt пометить как на удаление, добавив "-"

Код:
[HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\x86_wpf-windowsbase_31bf3856ad364e35_10.0.22621.517_none_5d8b0582586b80ba]

на

Код:
[-HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\x86_wpf-windowsbase_31bf3856ad364e35_10.0.22621.517_none_5d8b0582586b80ba]

Первый вариант решения в посте выше был бы предпочтительнее. Спасибо.

Всего записей: 1119 | Зарегистр. 18-11-2006 | Отправлено: 11:28 21-07-2023 | Исправлено: sakatgg, 11:34 21-07-2023
greeple

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Цитата:
а какая получилась строка запуска?

такая работает

Код:
Windows Registry Editor Version 5.00
 
[HKEY_CLASSES_ROOT\WinRAR.ZIP\shell\CopyFileList]
"MUIVerb"="Копировать список файлов из архива"
 
[HKEY_CLASSES_ROOT\WinRAR.ZIP\shell\CopyFileList\Command]
@="powershell -command \" $ix=-1; $body=$false; & 'C:\\Program Files\\7-Zip\\7z.exe' l '%1' | foreach{if ($ix -eq -1) {$ix = $_.IndexOf('Name')}; $p=$body; if ($ix -gt 0) {$body=($body -ne ($_ -match ' *-[ -]+'))}; if ($p -and $body) {$_.Substring($ix)}}\""

а такая уже ошибка

Код:
Windows Registry Editor Version 5.00
 
[HKEY_CLASSES_ROOT\WinRAR.ZIP\shell\CopyFileList]
"MUIVerb"="Копировать список файлов из архива"
 
[HKEY_CLASSES_ROOT\WinRAR.ZIP\shell\CopyFileList\Command]
@="powershell -command \" $ix=-1; $body=$false; & 'C:\\Program Files\\7-Zip\\7z.exe' l '%1' | foreach{if ($ix -eq -1) {$ix = $_.IndexOf('Name')}; $p=$body; if ($ix -gt 0) {$body=($body -ne ($_ -match ' *-[ -]+'))}; if ($p -and $body) {$_.Substring($ix)}} | Set-Clipboard\""


Цитата:
какая винда, пошик.

win10  
Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      19041  1682
Это не важно. Это уже давно так. Может из за того что импортировал дрова с 7ки на 10ку, ноут старый был на 7ке, и новые дрова на видюху показывают черный экран, только старые дрова норм работают, и установить их не импортом не получалось, посмотрю потом ещё, после переустановки, всё времени нет

Цитата:
"тест строка" | Set-Clipboard | Get-Clipboard


Код:
"тест строка" | Set-Clipboard | Get-Clipboard
"тест строка" | Set-Clipboard | Get-Clipboard
Set-Clipboard : Сбой при выполнении запрошенной операции с буфером обмена.
строка:1 знак:17
+ "тест строка" | Set-Clipboard | Get-Clipboard
+                     ~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: ( [Set-Clipboard], ExternalException
    + FullyQualifiedErrorId : System.Runtime.InteropServices.ExternalException,Microsoft.PowerShell.Commands.SetClipbo
   ardCommand


Код:
"или алиасы командлетов тест строка" | scb | gcb
scb : Сбой при выполнении запрошенной операции с буфером обмена.
строка:1 знак:40
+ "или алиасы командлетов тест строка" | scb | gcb
+                                                           ~~~
    + CategoryInfo          : NotSpecified: ( [Set-Clipboard], ExternalException
    + FullyQualifiedErrorId : System.Runtime.InteropServices.ExternalException,Microsoft.PowerShell.Commands.SetClipbo
   ardCommand

 
 
Добавлено:
Simple Code
Цитата:
Если нужно получить список файлов только архива .ZIP,

для всех надо, и rar и 7z  
я уже в принципе нашел варианты и с модулем https://github.com/thoemmi/7Zip4Powershell и cmd вариант, дальше сам
только вот вопрос ещё
в таком варианте

Код:
@Echo Off
  REM Sending the output of 7z into a file to use later
  "%ProgramFiles%\7-Zip\7z.exe" l -slt "C:\Users\greeple\Downloads\irfanview_lang_russian.zip" >"ZipListRAW.txt"
   
  REM Example of 7z.exe command with '-ba' switch
  REM 7z.exe l -ba -slt "SomeFileIZipped.zip"
   
  REM If you do not use '-ba' in the 7z command above, you can simply skip the first
  REM 11-12 lines of the file to get ONLY the filenames (skips past first line containing
  REM "Path" which contains the original archive filename.
   
  For /f "Usebackq Skip=11 Tokens=1,3* Delims= " %%a in ("ZipListRAW.txt") do (
    REM Checking if %%a equals word "Path"
    If "%%a"=="Path" (
      If [%%c]==[] (
        Echo %%b
      ) ELSE (
        Echo %%b %%c
      )
    )
  )

можно обойтись без txt? можно как то передать вывод в цикл? или сразу как то внутри скобок цикла где txt написать %%a in ("%ProgramFiles%\7-Zip\7z.exe" l -slt "C:\Users\greeple\Downloads\irfanview_lang_russian.zip") ?

Всего записей: 4252 | Зарегистр. 11-02-2020 | Отправлено: 12:33 21-07-2023
greeple

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
сейчас проверил на втором компе, там всё нормально работает, винду одинаковую устанавливал на них в одно время, но вот на ноуте не работает, и никакх изменений не вносил в ноут кроме импорта драйверов, ладно, это уже мои проблемы

Всего записей: 4252 | Зарегистр. 11-02-2020 | Отправлено: 14:59 21-07-2023
Simple Code

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

Цитата:
можно обойтись без txt? можно как то передать вывод в цикл? или сразу как то внутри скобок цикла где txt написать %%a in ("%ProgramFiles%\7-Zip\7z.exe" l -slt "C:\Users\greeple\Downloads\irfanview_lang_russian.zip") ?

Копирование в буфер, ну или куда надо, там уже сами.

Код:
 
Windows Registry Editor Version 5.00
 
;; ZIP
[HKEY_CLASSES_ROOT\SystemFileAssociations\.zip\Shell\CopyFileList]
@="Скопировать список файлов из архива"
[HKEY_CLASSES_ROOT\SystemFileAssociations\.zip\Shell\CopyFileList\command]
@="cmd.exe /c @echo off & (for /f \"UseBackQ Skip=11 Tokens=1,3* Delims= \" %%a in (`\"\"\"%ProgramFiles%\\7-Zip\\7z.exe\"\" l -slt \"\"%1\"\"\"`) do (if \"%%a\"==\"Path\" (if [%%c]==[] (echo %%b) else (echo %%b %%c)))) & pause>nul"
 
;; RAR
[HKEY_CLASSES_ROOT\SystemFileAssociations\.rar\Shell\CopyFileList]
@="Скопировать список файлов из архива"
[HKEY_CLASSES_ROOT\SystemFileAssociations\.rar\Shell\CopyFileList\command]
@="cmd.exe /c @echo off & (for /f \"UseBackQ Skip=11 Tokens=1,3* Delims= \" %%a in (`\"\"\"%ProgramFiles%\\7-Zip\\7z.exe\"\" l -slt \"\"%1\"\"\"`) do (if \"%%a\"==\"Path\" (if [%%c]==[] (echo %%b) else (echo %%b %%c)))) & pause>nul"
 
;; 7-zip
[HKEY_CLASSES_ROOT\SystemFileAssociations\.7z\Shell\CopyFileList]
@="Скопировать список файлов из архива"
[HKEY_CLASSES_ROOT\SystemFileAssociations\.7z\Shell\CopyFileList\command]
@="cmd.exe /c @echo off & (for /f \"UseBackQ Skip=11 Tokens=1,3* Delims= \" %%a in (`\"\"\"%ProgramFiles%\\7-Zip\\7z.exe\"\" l -slt \"\"%1\"\"\"`) do (if \"%%a\"==\"Path\" (if [%%c]==[] (echo %%b) else (echo %%b %%c)))) & pause>nul"
 

Всего записей: 172 | Зарегистр. 19-11-2022 | Отправлено: 00:13 22-07-2023 | Исправлено: Simple Code, 00:21 22-07-2023
sakatgg

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот нашел Удаление всех разделов в ветке реестра "Interfaces" за исключением одной
Сделал для теста так

Код:
@Echo Off
Set sKey=HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components
:: НЕудаляемый раздел
Set model=amd64_00c7160082b074e336046b7997c8e91c_b03f5f7f11d50a3a_4.0.15840.3_none_d85f626d1b7f4df0
 
:: удалить слово Echo ТОЛЬКО после тщательной проверки!!!
For /f "delims=" %%i In ('Reg query "%sKey%"') Do If Not "%%~ni"=="%model%" Echo Reg Delete "%sKey%\%%~ni" /f
Pause
Exit

 
При выполнении скрипта в консоле типа команды на удаление проходят, но по факту все кусты на месте
 

Код:
Reg Delete "HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\x86_wpf-xamlviewer_31bf3856ad364e35_10.0.22621" /f
Reg Delete "HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\x86_wwf-cperfcnt_31bf3856ad364e35_10.0.22621" /f
Reg Delete "HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\x86_wwf-cwetargets_i_31bf3856ad364e35_10.0.22621" /f
Reg Delete "HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\x86_wwf-cwevbtargets_i_31bf3856ad364e35_10.0.22621" /f
Reg Delete "HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\x86_wwf-netfx3reg_31bf3856ad364e35_10.0.22621" /f
Reg Delete "HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\x86_wwf-ngenpriorities_31bf3856ad364e35_10.0.22621" /f
Reg Delete "HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\x86_wwf-perfcnt_ini_31bf3856ad364e35_10.0.22621" /f
Reg Delete "HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\x86_wwf-servicing_key_productfamily_31bf3856ad364e35_10.0.22621" /f

 
Если батник такой запустить, то куст удаляется нормально.

Код:
Reg Delete "HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\x86_wwf-system.workflow.runtime_31bf3856ad364e35_10.0.22621.1_none_6a920dc9db67b8e7" /f

 
Подскажите что не так?
amd64_00c7160082b074e336046b7997c8e91c_b03f5f7f11d50a3a_4.0.15840.3_none_d85f626d1b7f4df0 - этот куст как исключение, его не надо удалять. И как правильно прописать, если исключений много, как прописанных в list.txt в выложенном выше архиве. Спасибо.
 
P.S. В той теме ТС тоже пишет что не удаляет, но в конце добавляет "Кодировку сменил.., ещё раз спасибо." - а как кодировку сменить?
 
P.S.2
Обратил внимание, что в консоле видно, удаляется обрубленная ветка, поэтому похоже и не происходит удаление

Код:
Reg Delete "HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\x86_wwf-perfcnt_ini_31bf3856ad364e35_10.0.22621" /f

А в реестре ветка полная

Код:
x86_wwf-perfcnt_ini_31bf3856ad364e35_10.0.22621.1_none_793b955a36b217c8

часть _none_793b955a36b217c8 почему-то обрубается
Может в скрипте что-то дописать, чтобы полностью виделся название куста?
 
P.S.3
Подредактировал скрипт так, вроде полные пути показывать стал

Код:
Set sKey=HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components
:: НЕудаляемый раздел
Set model=amd64_00c7160082b074e336046b7997c8e91c_b03f5f7f11d50a3a_4.0.15840.3_none_d85f626d1b7f4df0
 
:: удалить слово Echo ТОЛЬКО после тщательной проверки!!!
For /f "delims=" %%i In ('Reg query "%sKey%"') Do If Not "%%~i"=="%model%" Echo Reg Delete "%sKey%\%%~i" /f
Pause
Exit

 
Вывод типа такого сейчас

Код:
B:\>If Not "HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\x86_wwf-servicing_key_product_31bf3856ad364e35_10.0.22621.1_none_cbad3fdd551186a5" == "amd64_00c7160082b074e336046b7997c8e91c_b03f5f7f11d50a3a_4.0.15840.3_none_d85f626d1b7f4df0" Echo Reg Delete "HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\x86_wwf-servicing_key_product_31bf3856ad364e35_10.0.22621.1_none_cbad3fdd551186a5" /f
Reg Delete "HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\x86_wwf-servicing_key_product_31bf3856ad364e35_10.0.22621.1_none_cbad3fdd551186a5" /f
 
B:\>If Not "HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\x86_wwf-system.workflow.activities_31bf3856ad364e35_10.0.22621.1_none_37dd2312b35f6c62" == "amd64_00c7160082b074e336046b7997c8e91c_b03f5f7f11d50a3a_4.0.15840.3_none_d85f626d1b7f4df0" Echo Reg Delete "HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\x86_wwf-system.workflow.activities_31bf3856ad364e35_10.0.22621.1_none_37dd2312b35f6c62" /f
Reg Delete "HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\HKEY_LOCAL_MACHINE\COMPONENTS\DerivedData\Components\x86_wwf-system.workflow.activities_31bf3856ad364e35_10.0.22621.1_none_37dd2312b35f6c62" /f

Но кусты реестра всё равно не удаляются по факту

Всего записей: 1119 | Зарегистр. 18-11-2006 | Отправлено: 10:40 22-07-2023 | Исправлено: sakatgg, 13:32 22-07-2023
greeple

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sakatgg
тебе же изначально надо было из одного рег файла сделать другой только с путями из списка? так надо из реестра удалять по списку? так бы и писал сразу
вот неплохие темы  
https://learn.microsoft.com/ru-ru/powershell/scripting/samples/working-with-files-folders-and-registry-keys?view=powershell-5.1
https://learn.microsoft.com/ru-ru/powershell/scripting/samples/working-with-registry-entries?view=powershell-5.1
https://learn.microsoft.com/ru-ru/powershell/scripting/samples/working-with-registry-keys?view=powershell-5.1
например https://learn.microsoft.com/ru-ru/powershell/scripting/samples/working-with-files-folders-and-registry-keys?view=powershell-5.1#excluding-items исключение чтобы получить те которых нет в списке и потом удалить их, ну это ещё писать надо цикл, я не напишу

Всего записей: 4252 | Зарегистр. 11-02-2020 | Отправлено: 15:45 22-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

Компьютерный форум Ru.Board » Компьютеры » Программы » Активные темы » Командная строка, батники, сценарии - bat, cmd


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru