一种解决方案是:比"%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 /?
这是我到目前为止。 – rodr 2014-09-24 01:22:47
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
我只需要注册表中的计算机描述。除非有人知道是否有其他方法通过.bat文件从系统的其他任何位置捕获信息。 – rodr 2014-09-24 01:25:52