Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Имопрт Reg-файла (http://forum.oszone.net/showthread.php?t=337752)

Cytus 17-11-2018 12:12 2841178

Имопрт Reg-файла
 
Привет.

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

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

Код:

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

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

Код:

[HKEY_CURRENT_USER\Software\111]
В любом случае возвращается 0.

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

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

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

alpap 17-11-2018 13:28 2841186

если вы не просто ветку создаете (иначе именно 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 2841187

Цитата:

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

Да ладно. Вот для Вашего файла не-реестра:
Цитата:

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

[HKEY_CURRENT_USER\Software\111]
»

Скрытый текст


Если же исправить Ваш файл не-реестра, добавив в него потребное согласно описанию формата файла реестра, то:
Скрытый текст

Cytus 17-11-2018 13:43 2841189

Я имеею ввиду, что допустим, доступ к разделу запрещён.
Соответстсвенно, записано ничего не будет.
Но возвратиться 0, которое говорит об успехе.

Iska 17-11-2018 13:46 2841190

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

Атос 17-11-2018 14:07 2841193

Нет там потоков. STDOUT в Regedit.exe не поддерживается.

Iska 17-11-2018 14:10 2841195

Цитата:

Цитата Cytus
Я имеею ввиду, что допустим, доступ к разделу запрещён.
Соответстсвенно, записано ничего не будет.
Но возвратиться 0, которое говорит об успехе. »

Пожалуйста:
Скрытый текст

Я запретил полный доступ группе Everyone (Все) к разделу реестра HKEY_CURRENT_USER\Software\111. Результат попытки импорта файла реестра посредством reg.exe Вы видите. Что не так?

Cytus 17-11-2018 14:11 2841196

Ну вот допустим.

Код:

for %%f in (*.reg) do reg import "%%f"
1.cmd>\111.txt

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

Iska 17-11-2018 14:28 2841198

Cytus, а Вы для начала определитесь, что есть успех и что есть ошибка. Затем перенаправьте стандарный поток ошибок в стандартный поток вывода (поскольку reg.exe для информирования использует именно стандартный поток ошибок, а не стандартный поток вывода (стандартный поток вывода используется, например, для reg.exe query и т.п.):
Скрытый текст


А ещё лучше будет примерно так:
Код:

@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

Result.txt
Код:

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

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

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

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

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


Cytus 17-11-2018 14:34 2841201

У меня доступ к ключу закрыт.

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

ХР-система.

Казбек 17-11-2018 14:42 2841203

Код:

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

mwz 17-11-2018 15:08 2841206

Cytus

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

Iska 17-11-2018 18:37 2841231

Цитата:

Цитата Cytus
У меня доступ к ключу закрыт. »

Покажите это.

Цитата:

Цитата Cytus
Ничего не вносится. »

Покажите и это.

Цитата:

Цитата Cytus
Но пишет "Операция успешно завершена". »

Покажите и это.

Цитата:

Цитата Cytus
ХР-система. »

У меня сейчас Windows 7 x64 SP1.

Cytus 18-11-2018 06:02 2841273

Вопрос закрыт. Всем, спасибо, за участие.

mwz 18-11-2018 13:07 2841309

Цитата:

Цитата Cytus
Вопрос закрыт. »

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

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

Cytus 19-11-2018 09:40 2841420

Плюнул. Там ничего не придумаешь, потому как ни regedit.exe ни reg.exe не пишут в stdout.

alpap 19-11-2018 13:57 2841460

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

Iska 19-11-2018 17:45 2841508

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

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

alpap 19-11-2018 19:59 2841543

Цитата:

Цитата Iska
А по-хорошему »

согласен, проверка лишь чего-то одного и на не пустоту - просто понимание что произошел не просто импорт, а импорт действительно чего-то и не более, достоверности это конечно никакой не дает, так ..., пару процентов надежды.


Время: 00:57.

Время: 00:57.
© OSzone.net 2001-