Показать полную графическую версию : [решено] Как получить значение параметра из реестра, добавить значение в текстовый файл etc.?
SharkyEXE
24-01-2015, 21:42
У Вас ещё есть где-то NT 4.0?! »
Нет.
Просто нужна универсальность, чтобы одно и тоже работало как можно на большем количестве версий Windows
Можете попробовать использовать напрямую в пакетных файлах посредством «mshta.exe» в виде: »
А нельзя ли в пакетный файл вложить как-то только одну эту строку: WScript.Echo WScript.CreateObject("WScript.Shell").RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName")
Просто чем больше строк, чем больше зависимостей - тем хуже.
Вот я поэтому искал способ, чтобы только средствами cmd обойтись, чтобы не тащить vbs, wsh скрипты...
А нельзя ли в пакетный файл вложить как-то только одну эту строку: »
Можно. Именно эта строка и «вложена» в пакетный файл во втором коде (только не на VBScript, а на JScript) из моего предыдущего поста. Могу повторить:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "usebackq delims=" %%i in (
`@"%systemroot%\system32\mshta.exe" "javascript:try {new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(new ActiveXObject('WScript.Shell').RegRead('HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProductName'))};catch (e){};close();"`
) do set sProductName=%%i
if defined sProductName (
echo [%sProductName%]
) else (
echo Can't find [ProductName] parameter in [HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion].
)
endlocal
exit /b 0
Весь остальной «обвес» предназначен для запуска «mshta.exe» с передачей ему кода из его командной сроки, разбора полученного вывода от «mshta.exe» посредством «for /f», определения успешности исполнения кода в «mshta.exe» и вывода полученного результата. «Тащить» дополнительно ничего не надо. Никаких внешних зависимостей нет.
Просто нужна универсальность, чтобы одно и тоже работало как можно на большем количестве версий Windows »
Тогда нужно забыть про пакетные файлы и пользовать исключительно WSH.
SharkyEXE
25-01-2015, 09:41
«Тащить» дополнительно ничего не надо. Никаких внешних зависимостей нет. »
Да нет, есть гемморой, что это не заработает, так как Вы мне писали
но могут быть проблемы в новых ОС в случае, если там были заблокированы использованные объекты Automation в IE для зоны Локальный компьютер — это проверяйте на практике. »Одним словом пусть будет так, как Вы скажите, хотя, кончено, очень бы хотелось только средствами cmd реализовать, но для этого надо, походу дела, в Windows 2000 положить файл reg.exe
SharkyEXE, я написал «могут быть». Но это не значит, что «обязательно будут». Ваше дело проверить и отписаться по результатам.
SharkyEXE
26-01-2015, 07:34
SharkyEXE, я написал «могут быть». Но это не значит, что «обязательно будут». Ваше дело проверить и отписаться по результатам. »
Большое Вам спасибо за помощь, за готовый рабочий пример, но поймите меня, пожалуйста, правильно, хочется готовую конфетку - запустил на любой ОС и получил результат.
Если на какой-либо ОС что-то не сработает из-за каких-то ограничений mshta.exe - у меня нет желания и времени разбираться, почему не сработало на какой-либо ОС, лезть в настройки IE и снижать уровень безопасности и прочее
Поэтому мне проще отказаться от того, что я хотел, буду пользоваться выводом команды ver
SharkyEXE, поймите и меня правильно: это требуется Вам, но Вы не хотите даже просто проверить работоспособность. У меня в этом случае тем более не возникнет желания проделывать данную работу — искать, загружать, устанавливать разнообразные ОС и проверять под ними пакетный файл — вместо Вас.
Попробовал ваш вариант скрипта - спасибо . правда не разобрался в параметре %%J
For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows"^|Find /I "Device"`) Do set Device=%%J
CHCP 1251 >Nul
echo %Device%>>txt.txt
pause
пытаюсь получить принтер.
в консоли видно что имя полученно . но 2 я команда затирает его
d:\ADMIN\SSS>For /F "UseBackQ Tokens=2*" %I In (`Reg Query "HKCU\SOFTWARE\Micros
oft\Windows NT\CurrentVersion\Windows"|Find /I "Device"`) Do set Device=%J
d:\ADMIN\SSS>set Device=HP LaserJet P2015 Series PCL 6,winspool,Ne00:
d:\ADMIN\SSS>set Device=
d:\ADMIN\SSS>CHCP 1251 1>Nul
d:\ADMIN\SSS>echo 1>>txt.txt
d:\ADMIN\SSS>pause
Откуда берется set Device=
??
еще вариант . но как бы "выкусить лишнее"
REG QUERY "HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v device
вот результат
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows
device REG_SZ HP LaserJet 400 M401 PCL 6,winspool,Ne01:
А так не вариант?
@echo off
SetLocal EnableExtensions
for /f "tokens=2*" %%i in ('reg query "HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v "Device" 2^> nul') do set device=%%j
for /f "tokens=1 delims=," %%i in ("%device%") do echo."%%i"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.