2014-09-23 68 views
0

我需要查询注册表如何查询注册表项,并编写计算机描述日志文件

HKLM\System\CurrentControlSet\services\LanmanServer\Parameters\srvcomment 

我需要从srvcomment字符串值数据写入日志文件C:\Log.txt

我可以查询注册表,但我一直无法弄清楚如何使用if语句将值数据添加到日志文件。我真的很感激帮助。

这是我迄今为止

REG QUERY "HKLM\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters" /v "srvcomment" | Find "REG_SZ">>C:\Users\Home\Desktop\Test\"Computer Description".txt 

我只需要从注册表中计算机说明。除非有人知道是否有其他方法通过.bat文件从系统的其他任何位置捕获信息。

+0

这是我到目前为止。 – rodr 2014-09-24 01:22:47

+0

REG QUERY“HKLM \ SYSTEM \ CurrentControlSet \ services \ LanmanServer \ Parameters”/ v“srvcomment”|查找“REG_SZ”>> C:\ Users \ Home \ Desktop \ Test \“计算机描述”.txt – rodr 2014-09-24 01:23:03

+0

我只需要注册表中的计算机描述。除非有人知道是否有其他方法通过.bat文件从系统的其他任何位置捕获信息。 – rodr 2014-09-24 01:25:52

回答

0

你可以自己写一个批处理脚本与这两行。 仅为您提供Value srvcomment的ValueDate。

@ECHO OFF 
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKLM\System\CurrentControlSet\services\LanmanServer\Parameters" /v srvcomment') DO SET ServerName=%%B 
ECHO %ServerName% > C:\ServerName.txt 
0
reg /query "HKLM\System\CurrentControlSet\services\LanmanServer\Parameters\srvcomment" > "c:\Log.txt" 

+0

我试过了。不幸的是它没有奏效。但是,你确实帮助我更进了一步。 – rodr 2014-09-24 01:16:56

+0

@rodr - 尝试使用管理员权限执行此操作。 – npocmaka 2014-09-24 01:17:41

0

一种解决方案是:比"%TEMP%\Log.txt"不同

@echo off 
%SystemRoot%\System32\reg.exe query "HKLM\System\CurrentControlSet\services\LanmanServer\Parameters" /V "srvcomment" 1>nul 2>nul 
if errorlevel 1 (
    echo Computer "%COMPUTERNAME%" has no description.>"%TEMP%\Log.txt" 
) else (
    for /F "tokens=2*" %%C in ('%SystemRoot%\System32\reg.exe query "HKLM\System\CurrentControlSet\services\LanmanServer\Parameters" /V "srvcomment" ^| %SystemRoot%\System32\findstr.exe /C:srvcomment') do echo Computer "%COMPUTERNAME%" has description "%%D".>"%TEMP%\Log.txt" 
) 

东西应该用于日志文件。 C:\Log.txt也不是很好,因为驱动器C的根目录自Windows Vista以来对非管理员进行了写保护。

批处理文件首先使用命令reg检查字符串值srvcomment是否在Windows注册表中完全存在。输出到标准输出和标准错误流都被重定向到NUL设备来抑制它们。没有计算机描述的计算机在注册表中没有此字符串值。在这种情况下,计算机的适当信息被写入日志文件。

但如果字符串值srvcomment在Windows注册表中存在,命令reg与传递到工具findstr得到公正含srvcomment线输出再次执行。管道字符|必须在命令for内的命令中使用^这里进行转义。

输出由reg通过findstr过滤是:

srvcomment REG_SZ computer description 

for循环分裂基于分隔符的列表上的线。空格和水平制表符字符默认是唯一的分隔符。我们需要的是直到行尾的REG_SZ之后的字符串,即使此字符串包含空格。 REG_SZ是第二个用空格作为分隔符的字符串。由于指定了tokens=2*,第二个字符串被分配给占位符变量A,其他所有内容从第三个字符串开始,直到行尾为占位符变量B

所以现在所有需要写入计算机描述的日志文件都引用了占位符变量B中的echo命令重定向到日志文件的值。

有关使用命令的更多详细信息,请在命令提示符窗口,一个接一个:

reg query /? 
findstr /? 
for /? 
0

您可以在您可能需要重新设置一个批处理文件中使用以下命令

wmic /OUTPUT:c:\log.txt os get description /VALUE 

或以下PowerShell命令

(Get-WmiObject -Class Win32_OperatingSystem).Description | Out-File -FilePath C:\log.txt