Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Разархивирование файлов отдельной папки архива, через обращение к реестру

Ответить
Настройки темы
CMD/BAT - [решено] Разархивирование файлов отдельной папки архива, через обращение к реестру

Новый участник


Сообщения: 17
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Browning Zed
Дата: 29-11-2018
Здравствуйте, уважаемые форумчане. Будьте добры, подскажите как можно осуществить следующую операцию:

1. В реестре найти путь к WinRAR по ветке:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe /Path
и запустить его

2. Открыть архив Pack.rar (который лежит в одной директории с bat-файлом), и выбрать в нем все файлы и подпапки расположенные в данном архиве по пути Extras\Controller\

3. Распаковать их в папку "%UserProfile%\Documents\Extras\Control_1"

В итоге должно получится выражение, наподобие следующего:
Код: Выделить весь код
"Запуск WinRAR через реестр" x "путь к файлам находящимся в определенной папке в архиве" "%UserProfile%\Documents\Extras\Control_1"

Отправлено: 12:30, 29-11-2018

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Browning Zed, примерно так (путь искать не надо):
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=%~dp0Pack.rar
set sDestFolder=%UserProfile%\Documents\Extras\Control_1
set sMask=Extras\Controller\*.*

if exist "%sSourceFile%" (
	start "" "winrar.exe" x -o+ "%sSourceFile%" "%sMask%" "%sDestFolder%\"
) else (
	echo Can't find source file [%sSourceFile%].
	exit /b 1
)

endlocal
exit /b 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:57, 29-11-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 17
Благодарности: 0

Профиль | Отправить PM | Цитировать


Благодарю Вас, Iska, это гениально. А не могли бы в двух словах объяснить, каким образом этот код находит WinRAR? То есть, с простым путём, типа C:\Program Files\WinRAR\WinRAR.exe - понятно. А тут как работает?

Отправлено: 20:31, 29-11-2018 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


В двух — навряд ли. В большем же количестве — могу.

Никак не находит. В параметре App Paths хранятся имена исполняемых файлов и пути к ним, который может использовать функция ShellExecute(). Наша задача — лишь опосредованно вызвать её, что и делается посредством команды start. Примерно то же происходит, когда Вы последовательно делаете Win-R, winrar.exe, Enter. Просто в командной строке такой фокус не проделать — там просматривается только PATH (а вот в Far Manager'е можно — тамошний обработчик командной строки-запускатор задействует параметр App Paths [он, кстати, и себя туда добавляет]).

Ссылки для чтения:
В каких случаях при запуске программы не надо указывать полный путь к ней – Вадим Стеркин
Application Registration | Microsoft Docs
How the App Paths Registry Key Makes Windows Both Faster and Safer • Helge Klein
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:45, 29-11-2018 | #4


Новый участник


Сообщения: 17
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, спасибо за развернутый ответ. Пойду курить мануалы.

А можно ли посредством этого кода разархивировать файлы находящиеся в архиве в директории определяемые через реестр?

1-я ветка реестра (системная папка «Документы»)
Код: Выделить весь код
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders / "Personal"
2-я ветка реестра (папка с игрой)
Код: Выделить весь код
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\bioware\mass effect / "path"
где "Personal" и "path" - ключи реестра содержащие пути.

Последний раз редактировалось Browning Zed, 29-11-2018 в 21:41.


Отправлено: 20:52, 29-11-2018 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Из письма в PM:
Цитата Browning Zed:
не могли бы Вы ещё помочь с решением одного вопроса в теме:
Browning Zed, откровенно говоря, не испытываю большого желания делать сие на пакетных файлах.

Отправлено: 00:11, 30-11-2018 | #6


Новый участник


Сообщения: 17
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
откровенно говоря, не испытываю большого желания делать сие на пакетных файлах. »
Но ведь технически, это возможно? Нужен простой пример, как это сделать. На основе этой ветки:
Код: Выделить весь код
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\bioware\mass effect / "path"
Пробую так - ничего не получается:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion
set reg_path=HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\bioware\mass effect
set reg_param=path
for /f "tokens=1,2,*" %%a in ('reg query "%reg_path%" /v "%reg_param%"') do if "%%a"=="%reg_param%" set reg_value=%%c
set sSourceFile=%~dp0Pack.rar
set sMask=Extras\Controller\*.*
if exist "%sSourceFile%" (
	start "" "winrar.exe" x -o+ "%sSourceFile%" "%sMask%" "%reg_value%\"
) else (
	echo Can't find source file [%sSourceFile%].
	exit /b 1
)

endlocal
exit /b 0

Последний раз редактировалось Browning Zed, 30-11-2018 в 17:55.


Отправлено: 12:22, 30-11-2018 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Browning Zed, технически возможно. Возни много. Начиная с того, что надо сначала определить разрядность установленной ОС, и только в зависимости от этого лезть по тому или иному пути в реестр.

Отправлено: 18:09, 30-11-2018 | #8


Новый участник


Сообщения: 17
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, в моем случае, как мне кажется, реестр не будет иметь значения.
Собственно, для чего это нужно. Делаю модификацию для игры. Суть модификации - замена текстур со старых на новые (расположенных в директории приложения), а также замена файла конфигурации игры (находящемся в папке «Документы»), с измененными значениями, дабы эти текстуры в игре активировать. Никакие значения в реестре затрагиваться не будут. И делать инсталлятор для простых процедур распаковки и копипаста, как по мне, излишне.

Отправлено: 18:36, 30-11-2018 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Browning Zed:
И делать инсталлятор для простых процедур распаковки и копипаста, как по мне, излишне. »
И напрасно. Inno Setup вполне будет гож в этом случае. Старые текстуры и файл конфигурации можно зарезервировать и при удалении модификации — восстановить.

Отправлено: 18:54, 30-11-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Разархивирование файлов отдельной папки архива, через обращение к реестру

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Разархивирование rar архива с заменой и его удаление DarkDeivel Скриптовые языки администрирования Windows 13 07-08-2016 00:41
CMD/BAT - [решено] Архивирование файлов через один из другой архватор запросом ИМЕНИ создаваемого архива DJIOAN Скриптовые языки администрирования Windows 5 16-04-2015 11:17
Интерфейс - [решено] Возможно ли отображение скрытых файлов в отдельной папке А_н_д_р_ей Microsoft Windows 7 5 18-06-2014 18:37
2008 R2 - Создание отдельной папки для каждого пользователя локальной сети (под логином и паро) sokol140387 Windows Server 2008/2008 R2 9 31-08-2012 11:11
Доступ к реестру через RegEdit? Temp2000 Лечение систем от вредоносных программ 4 10-09-2007 17:30




 
Переход