一種解決方案是:比"%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