Batch file 如何查询注册表项并将计算机描述写入日志文件

Batch file 如何查询注册表项并将计算机描述写入日志文件,batch-file,Batch File,我需要在注册表中查询 HKLM\System\CurrentControlSet\services\LanmanServer\Parameters\srvcomment 我需要将srvcomment字符串中的值数据写入日志文件C:\log.txt 我可以查询注册表,但是我还没有弄清楚如何使用if语句将值数据添加到日志文件中。我非常感谢你的帮助 这就是我目前所拥有的 REG QUERY "HKLM\SYSTEM\CurrentControlSet\services\LanmanServer\Pa

我需要在注册表中查询

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文件从系统上的任何其他位置捕获信息

reg /query "HKLM\System\CurrentControlSet\services\LanmanServer\Parameters\srvcomment"  > "c:\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"
)
日志文件应使用与
“%TEMP%\Log.txt”
不同的内容
C:\Log.txt
也不好,因为自Windows Vista以来,驱动器C:的根目录通常为非管理员提供写保护

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

但是,如果Windows注册表中存在字符串值
srvcomment
,则再次执行命令
reg
,并将输出传递到工具
findstr
,以仅获取包含
srvcomment
的行。管道字符
|
必须在此处使用
^
进行转义,如的命令
中所用

通过
reg
过滤的
findstr
输出为:

    srvcomment  REG_SZ  computer description
for
循环根据分隔符列表拆分一行。默认情况下,空格和水平制表符是唯一的分隔符。这里我们需要的是
REG_SZ
后面的字符串,直到行末,即使该字符串包含空格
REG_SZ
是第二个字符串,空格用作分隔符。由于指定了
tokens=2*
,第二个字符串被分配给占位符变量
A
,其他所有内容从第三个字符串到行尾都被分配给占位符变量
B

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

有关在命令提示符窗口中逐个运行的已用命令的详细信息,请参见:

reg query /?
findstr /?
for /?

您可以在可能需要重新格式化的批处理文件中使用以下命令

wmic /OUTPUT:c:\log.txt os get description /VALUE
或以下Powershell命令

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

您可以用这两行代码自己编写一个批处理脚本。 仅提供值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

我试过了。不幸的是,它没有起作用。不过,你确实帮了我一步。@rodr-尝试使用管理员权限执行此操作。这是我目前所拥有的。REG查询“HKLM\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters”/v“srvcomment”|查找“REG_SZ”>>C:\Users\Home\Desktop\Test\“Computer Description”。txtI只需要注册表中的计算机描述。除非有人知道是否有其他方法通过.bat文件从系统上的任何其他位置捕获信息。