Показать полную графическую версию : [решено] Имопрт Reg-файла
Привет.
Как узнать, что импорт REG-файла прошёл успешно?
Допустим, я запускаю батник с таким содержимым.
reg import "C:\Temp\111.reg"
echo %errorlevel%
Reg-файл имеет такое содержимое.
[HKEY_CURRENT_USER\Software\111]
В любом случае возвращается 0.
Даже если доступ к ключу запрещён, и ничего не вносится.
Даже если корневого раздела не существует.
Во всех справках говорится, что при сбое будет возвращена единица.
Как, вообще, возможно узнать, удачно-ли импортировался Reg-файл?
если вы не просто ветку создаете (иначе именно 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 легче работать с реестром, а тут что первое в голову пришло то и написал.
В любом случае возвращается 0. »
Да ладно. Вот для Вашего файла не-реестра:
Reg-файл имеет такое содержимое.
[HKEY_CURRENT_USER\Software\111] »
https://i.imgur.com/UzKdvqZ.png
Если же исправить Ваш файл не-реестра, добавив в него потребное согласно описанию формата файла реестра, то:
https://i.imgur.com/9mKGWrL.png
Я имеею ввиду, что допустим, доступ к разделу запрещён.
Соответстсвенно, записано ничего не будет.
Но возвратиться 0, которое говорит об успехе.
Другое дело, что толку в этом мало: ну, предположим, узнали мы, что некая часть данных не была успешно импортирована в реестр — и что? Чтобы реально отслеживать что-то, нужны единичные операции с каждым отдельным разделом и параметром, и ведение лога на каждый чих.
Нет там потоков. STDOUT в Regedit.exe не поддерживается.
Я имеею ввиду, что допустим, доступ к разделу запрещён.
Соответстсвенно, записано ничего не будет.
Но возвратиться 0, которое говорит об успехе. »
Пожалуйста:
https://i.imgur.com/Ras6LgQ.png
Я запретил полный доступ группе Everyone (Все) к разделу реестра HKEY_CURRENT_USER\Software\111. Результат попытки импорта файла реестра посредством reg.exe Вы видите. Что не так?
Ну вот допустим.
for %%f in (*.reg) do reg import "%%f"
1.cmd>\111.txt
В 111.txt я хочу увидеть успех или ошибку.
Как такое сделать?
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]:
---------------------------------
Операция успешно завершена.
---------------------------------
У меня доступ к ключу закрыт.
Ничего не вносится. Но пишет "Операция успешно завершена".
ХР-система.
reg query "HKEY_CURRENT_USER\Software\111" >nul 2>&1 &CALL echo %^errorlevel%
Проверяйте изменения, внесенные файлом, а не результат обработки импорта.
Cytus
Вам Iska уже намекнул, что ваш исходно приведенный вроде бы reg-файл на самом деле не является файлом реестра: в нём отсутствует заголовок reg-файла.
У меня доступ к ключу закрыт. »
Покажите это.
Ничего не вносится. »
Покажите и это.
Но пишет "Операция успешно завершена". »
Покажите и это.
ХР-система. »
У меня сейчас Windows 7 x64 SP1.
Вопрос закрыт. Всем, спасибо, за участие.
Вопрос закрыт. »
Как?
1. Что-то из советов помогло?
2. Сами решили (и как решили)?
2. Плюнули на это дело?
— Я свою проблему решил.
— А как?
— Я решил, что это не проблема.
Плюнул. Там ничего не придумаешь, потому как ни regedit.exe ни reg.exe не пишут в stdout.
Cytus,
в windows хватает косяков
в reg import ошибка выйдет, если именно сам импорт не пройдет из-за того что файл не reg или подобное глобальное, а так можно сравнить с брошенным по мишени камнем. Попали или нет, дело такое, а камень брошен - импорт произошел.
Надо проверять (после импорта) именно наличие данных, пример в п2 или другим подобным или удобным способом.
alpap, ну, вот у меня именно что так: если раздел недоступен из-за отсутствия прав — reg.exe import возвращает ненулевой код возврата.
А по-хорошему — надо проверять создание каждого раздела и каждого параметра, и делать сие, разумеется, придётся в WSH/PoSH.
А по-хорошему »
согласен, проверка лишь чего-то одного и на не пустоту - просто понимание что произошел не просто импорт, а импорт действительно чего-то и не более, достоверности это конечно никакой не дает, так ..., пару процентов надежды.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.