Показать полную графическую версию : [решено] Как получить значение параметра из реестра, добавить значение в текстовый файл etc.?
Dark Ange1
07-09-2010, 14:35
Доброе время суток!
Подскажите пожалуйста, как получить ТОЛЬКО значение одного параметра из реестра и скопировать его в буфер обмена и/или в текстовый файл?
Например, мне нужно скопировать и записать в текстовый файл(с перезаписью) значение параметра dword Wallpaper_0_FileName из пути реестра HKEY_CURRENT_USER\Software\Binary Fortress Software\DisplayFusion\Wallpaper
Как-то так: For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKCU\Software\Binary Fortress Software\DisplayFusion\Wallpaper"^|Find /I "Wallpaper_0_FileName"`) Do Echo %%J>text.txt
Dark Ange1
08-10-2010, 21:41
Спасибо, супер, работает! Осталось только добавить, что в начале батника/cmd надо ставить CHCP 1251 чтобы правильно копировалась кириллица.
И как нужно модифицировать код, чтобы значение не заменялось а добавлялось в конец файла?
добавлялось в конец файла? »
Добавить еще один ">"For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKCU\Software\Binary Fortress Software\DisplayFusion\Wallpaper"^|Find /I "Wallpaper_0_FileName"`) Do Echo %%J>>text.txt
Dark Ange1
08-10-2010, 22:13
И еще: если For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKCU\Software\Binary Fortress Software\DisplayFusion\Wallpaper"^|Find /I "Wallpaper_0_FileName"`) Do Echo %%J|clip, то как потом в этой же консоли вставить значение буфера обмена. Например, для использования с командой move
Добавить еще один ">" »
блин, не поверишь - только что сам вспомнил и хотел сюда написать:)
Отлично. Теперь я могу получить текстовый файл со списком путей к файлу, включая имя файла в столбик типа этого:
D:\Wallpapers\Dir1\file1.jpg
D:\Wallpapers\Dir2\file2.jpg
D:\Wallpapers\Dir1\file55.jpg
...
D:\Wallpapers\Dir678\file2098.jpg
...
А вот как теперь копировать/переместить/удалить файлы по путям из того списка?
For /F "tokens=* delims=" %%i In (names.txt) Do Echo %%i
names.txt - файл со списком путей
Echo - замените на: копировать/переместить/удалить
Dark Ange1
08-10-2010, 23:10
А если пути файлов в names.txt содержат пробелы?
Dark Ange1
08-10-2010, 23:45
Спасибо. Заработало. Но для xcopy заработало только после того, как поменял Do xcopy %%i C:\Walls\ /y на Do xcopy "%%i" C:\Walls\ /y, т.е. %%i взял в кавычки.
Я немного некорректно сообщил условия Отлично. Теперь я могу получить текстовый файл со списком путей к файлу, включая имя файла в столбик типа этого:
D:\Wallpapers\Dir1\file1.jpg
D:\Wallpapers\Dir2\file2.jpg
D:\Wallpapers\Dir1\file55.jpg
...
D:\Wallpapers\Dir678\file2098.jpg
...
На самом деле в списке присутствовала кириллица в кодировке CHCP 1251 и пробелы:
D:\Обои на удаление\Папка 1\файл1.jpg
D:\Обои на удаление\Папка 2\файл2.jpg
D:\Обои на удаление\Папка 1\файл_42.jpg
...
D:\Обои на удаление\-=Папка 546=-\файл_222.jpg
...
Пытаюсь разобраться с присвоением переменных. Подскажите, почему не работает скрипт?
For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"^|Find /I "BuildLab"`) Do set /a Build=%%a
For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"^|Find /I "CSDVersion"`) Do set /a Version=%%b
For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"^|Find /I "ProductName"`) Do set /a Product=%%c
CHCP 1251 >Nul
echo %Product%>>txt.txt
echo %Version%>>txt.txt
echo %Build%>>txt.txt
For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"^|Find /I "BuildLab"`) Do set /a Build=%%a »Удалите во всех строках выделенное цветом.
Удалите во всех строках выделенное цветом. »
удалил, результат:
%c
%b
%a
расчитывал получить
Microsoft Windows XP
Service Pack 3
2600.xpsp_sp3_qfe.100216-1510
А так?For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion"^|Find /I "BuildLab"`) Do set Build=%%J
For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion"^|Find /I "CSDVersion"`) Do set Version=%%J
For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion"^|Find /I "ProductName"`) Do set Product=%%J
CHCP 1251 >Nul
echo %Product%>>txt.txt
echo %Version%>>txt.txt
echo %Build%>>txt.txt
А так? »
Скрипт заработал. Пишет первую и последнюю переменную, среднюю %Version% писать не хочет:
Microsoft Windows XP
2600.xpsp_sp3_qfe.100216-1510
среднюю %Version% писать не хочет: »
Там в конце "3" стоит, вот об нее и спотыкается. Исправьте последние строки так:>>txt.txt echo %Product%
>>txt.txt echo %Version%
>>txt.txt echo %Build%
SharkyEXE
24-01-2015, 11:32
2 all
Подниму тему
Есть 100%но рабочий вариант, файл 1.cmd
@Echo Off
Rem http://forum.oszone.net/post-1132000-6.html
For /F "Tokens=2* Delims= " %%A In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V ProductName^|Find "REG_SZ"') Do Set OS1=%%B
@Echo %OS1%
Pause
ExitНо этот вариант не работает на Windows 2000, потому что в Windows 2000 отсутствует файл reg.exe
Пожалуйста, напишите мне 100%но рабочий вариант файла 1.cmd, чтобы работало в Windows 2000
в Windows 2000 отсутствует файл reg.exe »
А команда ver там работает или ее результат тоже не устраивает?Microsoft Windows XP [Версия 5.1.2600]
-----------------------------------------
Microsoft Windows [Version 6.1.7601]
-----------------------------------------
Microsoft Windows [Version 10.0.9926]
SharkyEXE
24-01-2015, 18:37
команда ver там работает »
В Windows 2000 команда ver работает.
Microsoft Windows 2000 [Версия 5.00.2195]Но моя затея, если это возможно, чтобы вывести содержимое параметра ProductName из ключа HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion в Windows 2000
SharkyEXE, используйте WSH.
SharkyEXE
24-01-2015, 19:11
используйте WSH »
Мне надо, чтобы работало от Windows 2000 (можно даже более ранние выпуски Windows) до Windows 8.1
Если WSH удовлетворяет этому требованию - пожалуйста, напишите мне готовый код, чтобы вывести содержимое параметра ProductName из ключа HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
Спасибо.
Мне надо, чтобы работало от Windows 2000 … до Windows 8.1
Если WSH удовлетворяет этому требованию »
Удовлетворяет.
можно даже более ранние выпуски Windows »
У Вас ещё есть где-то NT 4.0?!
WScript.Echo WScript.CreateObject("WScript.Shell").RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName")
Можете попробовать использовать напрямую в пакетных файлах посредством «mshta.exe» в виде:
@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
но могут быть проблемы в новых ОС в случае, если там были заблокированы использованные объекты Automation в IE для зоны Локальный компьютер — это проверяйте на практике.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.