PDA

Показать полную графическую версию : [решено] Имопрт Reg-файла


Cytus
17-11-2018, 12:12
Привет.

Как узнать, что импорт REG-файла прошёл успешно?

Допустим, я запускаю батник с таким содержимым.

reg import "C:\Temp\111.reg"
echo %errorlevel%

Reg-файл имеет такое содержимое.

[HKEY_CURRENT_USER\Software\111]

В любом случае возвращается 0.

Даже если доступ к ключу запрещён, и ничего не вносится.
Даже если корневого раздела не существует.

Во всех справках говорится, что при сбое будет возвращена единица.

Как, вообще, возможно узнать, удачно-ли импортировался Reg-файл?

alpap
17-11-2018, 13:28
если вы не просто ветку создаете (иначе именно reg import лишнее reg add хватит), а и данные в ней, то проверить не пустая ли ветка и естественно ее существование, можно так:

reg import "C:\Temp\111.reg"
reg query "HKEY_CURRENT_USER\Software\111"|find /v "" && (echo Успешно, ветка не пуста) || (echo Или данные не внесены или ветки нет)
pause

ну и конечно, если ветка есть и данных немало, то проверять на добавление свежих, т.е. вместо: find /v "" писать find "Какие-то данные"

в PowerShell легче работать с реестром, а тут что первое в голову пришло то и написал.

Iska
17-11-2018, 13:33
В любом случае возвращается 0. »
Да ладно. Вот для Вашего файла не-реестра:
Reg-файл имеет такое содержимое.
[HKEY_CURRENT_USER\Software\111] »
https://i.imgur.com/UzKdvqZ.png

Если же исправить Ваш файл не-реестра, добавив в него потребное согласно описанию формата файла реестра, то:
https://i.imgur.com/9mKGWrL.png

Cytus
17-11-2018, 13:43
Я имеею ввиду, что допустим, доступ к разделу запрещён.
Соответстсвенно, записано ничего не будет.
Но возвратиться 0, которое говорит об успехе.

Iska
17-11-2018, 13:46
Другое дело, что толку в этом мало: ну, предположим, узнали мы, что некая часть данных не была успешно импортирована в реестр — и что? Чтобы реально отслеживать что-то, нужны единичные операции с каждым отдельным разделом и параметром, и ведение лога на каждый чих.

Атос
17-11-2018, 14:07
Нет там потоков. STDOUT в Regedit.exe не поддерживается.

Iska
17-11-2018, 14:10
Я имеею ввиду, что допустим, доступ к разделу запрещён.
Соответстсвенно, записано ничего не будет.
Но возвратиться 0, которое говорит об успехе. »
Пожалуйста:
https://i.imgur.com/Ras6LgQ.png
Я запретил полный доступ группе Everyone (Все) к разделу реестра HKEY_CURRENT_USER\Software\111. Результат попытки импорта файла реестра посредством reg.exe Вы видите. Что не так?

Cytus
17-11-2018, 14:11
Ну вот допустим.

for %%f in (*.reg) do reg import "%%f"

1.cmd>\111.txt

В 111.txt я хочу увидеть успех или ошибку.
Как такое сделать?

Iska
17-11-2018, 14:28
Cytus, а Вы для начала определитесь, что есть успех и что есть ошибка. Затем перенаправьте стандарный поток ошибок в стандартный поток вывода (поскольку reg.exe для информирования использует именно стандартный поток ошибок, а не стандартный поток вывода (стандартный поток вывода используется, например, для reg.exe query и т.п.):
https://i.imgur.com/x9TE840.png

А ещё лучше будет примерно так:
@echo off
setlocal enableextensions enabledelayedexpansion

>"Result.txt" 2>&1 (
for %%i in (*.reg) do (
echo [%%~fi]:
echo ---------------------------------
reg.exe import "%%~i"
echo ---------------------------------
echo.
)
)

endlocal
exit /b 0
[C:\Мои проекты\0218\0001.reg]:
---------------------------------
Ошибка: Указанный файл не является файлом реестра. Поддерживается импорт только файлов
реестра.
---------------------------------

[C:\Мои проекты\0218\0002.reg]:
---------------------------------
Ошибка: Ошибка при доступе к реестру.
---------------------------------

[C:\Мои проекты\0218\0003.reg]:
---------------------------------
Ошибка: Ошибка при доступе к реестру.
---------------------------------

[C:\Мои проекты\0218\0004.reg]:
---------------------------------
Операция успешно завершена.

---------------------------------

Cytus
17-11-2018, 14:34
У меня доступ к ключу закрыт.

Ничего не вносится. Но пишет "Операция успешно завершена".

ХР-система.

Казбек
17-11-2018, 14:42
reg query "HKEY_CURRENT_USER\Software\111" >nul 2>&1 &CALL echo %^errorlevel%
Проверяйте изменения, внесенные файлом, а не результат обработки импорта.

mwz
17-11-2018, 15:08
Cytus

Вам Iska уже намекнул, что ваш исходно приведенный вроде бы reg-файл на самом деле не является файлом реестра: в нём отсутствует заголовок reg-файла.

Iska
17-11-2018, 18:37
У меня доступ к ключу закрыт. »
Покажите это.

Ничего не вносится. »
Покажите и это.

Но пишет "Операция успешно завершена". »
Покажите и это.

ХР-система. »
У меня сейчас Windows 7 x64 SP1.

Cytus
18-11-2018, 06:02
Вопрос закрыт. Всем, спасибо, за участие.

mwz
18-11-2018, 13:07
Вопрос закрыт. »

Как?
1. Что-то из советов помогло?
2. Сами решили (и как решили)?
2. Плюнули на это дело?

— Я свою проблему решил.
— А как?
— Я решил, что это не проблема.

Cytus
19-11-2018, 09:40
Плюнул. Там ничего не придумаешь, потому как ни regedit.exe ни reg.exe не пишут в stdout.

alpap
19-11-2018, 13:57
Cytus,
в windows хватает косяков
в reg import ошибка выйдет, если именно сам импорт не пройдет из-за того что файл не reg или подобное глобальное, а так можно сравнить с брошенным по мишени камнем. Попали или нет, дело такое, а камень брошен - импорт произошел.
Надо проверять (после импорта) именно наличие данных, пример в п2 или другим подобным или удобным способом.

Iska
19-11-2018, 17:45
alpap, ну, вот у меня именно что так: если раздел недоступен из-за отсутствия прав — reg.exe import возвращает ненулевой код возврата.

А по-хорошему — надо проверять создание каждого раздела и каждого параметра, и делать сие, разумеется, придётся в WSH/PoSH.

alpap
19-11-2018, 19:59
А по-хорошему »
согласен, проверка лишь чего-то одного и на не пустоту - просто понимание что произошел не просто импорт, а импорт действительно чего-то и не более, достоверности это конечно никакой не дает, так ..., пару процентов надежды.




© OSzone.net 2001-2012