PDA

Показать полную графическую версию : [решено] Как получить значение параметра из реестра, добавить значение в текстовый файл etc.?


Страниц : [1] 2

Dark Ange1
07-09-2010, 14:35
Доброе время суток!

Подскажите пожалуйста, как получить ТОЛЬКО значение одного параметра из реестра и скопировать его в буфер обмена и/или в текстовый файл?
Например, мне нужно скопировать и записать в текстовый файл(с перезаписью) значение параметра dword Wallpaper_0_FileName из пути реестра HKEY_CURRENT_USER\Software\Binary Fortress Software\DisplayFusion\Wallpaper

gora
09-09-2010, 11:09
Как-то так: 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 чтобы правильно копировалась кириллица.

И как нужно модифицировать код, чтобы значение не заменялось а добавлялось в конец файла?

gora
08-10-2010, 22:07
добавлялось в конец файла? »
Добавить еще один ">"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
...

А вот как теперь копировать/переместить/удалить файлы по путям из того списка?

gora
08-10-2010, 22:48
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
...

sov44
24-03-2011, 20:14
Пытаюсь разобраться с присвоением переменных. Подскажите, почему не работает скрипт?

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

gora
24-03-2011, 20:35
For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"^|Find /I "BuildLab"`) Do set /a Build=%%a »Удалите во всех строках выделенное цветом.

sov44
24-03-2011, 20:56
Удалите во всех строках выделенное цветом. »
удалил, результат:

%c
%b
%a

расчитывал получить

Microsoft Windows XP
Service Pack 3
2600.xpsp_sp3_qfe.100216-1510

gora
24-03-2011, 21:07
А так?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

sov44
24-03-2011, 21:45
А так? »
Скрипт заработал. Пишет первую и последнюю переменную, среднюю %Version% писать не хочет:

Microsoft Windows XP
2600.xpsp_sp3_qfe.100216-1510

gora
24-03-2011, 21:53
среднюю %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

gora
24-01-2015, 11:52
в 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

Iska
24-01-2015, 18:56
SharkyEXE, используйте WSH.

SharkyEXE
24-01-2015, 19:11
используйте WSH »
Мне надо, чтобы работало от Windows 2000 (можно даже более ранние выпуски Windows) до Windows 8.1

Если WSH удовлетворяет этому требованию - пожалуйста, напишите мне готовый код, чтобы вывести содержимое параметра ProductName из ключа HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion

Спасибо.

Iska
24-01-2015, 19:43
Мне надо, чтобы работало от 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