2013-07-08 23 views
0

我正在运行批处理文件,使用“reg查询”命令检查一些注册表文件。我设置了将错误消息发送到错误日志(ErrorLog.txt),并告诉用户检查主结果文本文件(REGValues.txt)中的错误日志。问题是我在整个REGValues.txt文件中看到这些看似随机的空白行。我如何避免插入这些空行?批量注册查询添加意外的空白行到输出文件

这是我的代码的一部分,刚刚过去它通常添加到空白行的地方。

mkdir c:\temp2\ 
SET dirname=c:\temp2\ 
SET filename2=REGValues.txt 
SET errlog=ErrorLog.txt 

:_registryValues 
@echo Scanning Registry Values 

@echo HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\LegalNoticeText 1>>  %dirname%/%errlog% 
reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\" /v LegalNoticeText /z 1>> %dirname%\%filename2% 2>> %dirname%\%errlog% 
if errorLevel 1 echo Check Error Log 1>> %dirname%\%filename2% 

@echo HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\LegalNoticeCaption 1>> %dirname%/%errlog% 
reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\" /v LegalNoticeCaption /z>> %dirname%\%filename2% 2>> %dirname%\%errlog% 
if errorLevel 1 echo Check Error Log 1>> %dirname%\%filename2% 

@echo HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword 1>> %dirname%/%errlog% 
reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\" /v DefaultPassword /z >> %dirname%\%filename2% 2>> %dirname%\%errlog% 
if errorLevel 1 echo Check Error Log 1>> %dirname%\%filename2% 

@echo HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AdditionalBaseNamedObjectsProtectionMode 1>> %dirname%/%errlog% 
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\" /v AdditionalBaseNamedObjectsProtectionMode /z >> %dirname%\%filename2% 2>> %dirname%\%errlog% 
if errorLevel 0 echo Check Error Log 1>> %dirname%\%filename2% 

@echo HKLM\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\EnablePortLocking 1>> %dirname%/%errlog% 
reg query HKLM\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\ /v EnablePortLocking /z >> %dirname%\%filename2% 2>> %dirname%\%errlog% 
if errorLevel 1 echo Check Error Log 1>> %dirname%\%filename2% 

@echo HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\EnhancedSecurityLevel 1>> %dirname%/%errlog% 
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\" /v EnhancedSecurityLevel /z >> %dirname%\%filename2% 2>> %dirname%\%errlog% 
if errorLevel 1 echo Check Error Log 1>> %dirname%\%filename2% 

@echo HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\LDAPServerIntegrity 1>> %dirname%/%errlog% 
reg query HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\ /v LDAPServerIntegrity /z >> %dirname%\%filename2% 2>> %dirname%\%errlog% 
if errorLevel 1 echo Check Error Log 1>> %dirname%\%filename2% 

这里是文本文件的样子,我把结果太:

Check Error Log 
Check Error Log 
Check Error Log 
Check Error Log 


Check Error Log 
Check Error Log 

它打印出我的错误日志就好:

HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\LegalNoticeText 
ERROR: The system was unable to find the specified registry key or value. 
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\LegalNoticeCaption 
ERROR: The system was unable to find the specified registry key or value. 
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword 
ERROR: The system was unable to find the specified registry key or value. 
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AdditionalBaseNamedObjectsProtectionMode 
ERROR: The system was unable to find the specified registry key or value. 
HKLM\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\EnablePortLocking 
ERROR: The system was unable to find the specified registry key or value. 
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\EnhancedSecurityLevel 
ERROR: The system was unable to find the specified registry key or value. 
+0

你使用什么Windows版本? – Endoro

+0

我使用的是Windows 8,但它也发生在Windows 7上......我想我想通了。我以为你只需要双引号,如果我正在寻找注册表值的空间,但没有双引号的值是我得到空行的地方。 – Chris

+0

双引号并不是解决方案,但我将问题缩小到:它发生在没有双引号“”的键上。我尝试添加它,但它只是说没有找到密钥,即使之前是这样。 – Chris

回答

0

虽然我还是不要不知道为什么,我通过采取不同的方法找到了解决方案。与其试图弄清为什么文件中的任意空白行,我决定找到一种在文件创建后删除行的方式。

我用这个命令(放置在我的批处理文件的最后)删除空行。

@echo Cleaning File 

For /F "tokens=* delims=" %%A in (%RegValues.txt%) Do Echo %%A >> %RegValues_Clean.txt% 

@echo Finished Cleaning File 
1

请仔细检查。

第一件事:键名应NOT终止\ - 我用W7,并得到\末端VS无糖\末端

第二个问题不同的结果:IF ERRORLEVEL 0(HKLM \系统\ CurrentControlSet \控制\会话管理器)是总是如此。 IF ERRORLEVEL n为真,如果errorlevel为n 或多于N

三件事:1>> - 在1是多余的(风格问题 - 或许你喜欢打字?)

四:@echo on在的开始脚本将关闭批处理代码。进一步@echos然后是多余的 - echo就足够了。

现在 - 相反,您会发现从键中删除终端\将产生MORE空行。 req query输出一个间隔很大的报告和一堆空白。所报告的值是换行符,并以另一个终止 - 或者看起来似乎...

+0

感谢您花时间回复。我将坚持使用脚本删除空白行。然而,我将会对你的冗余提出一些建议。我正在开发一个我的同事开始的程序,所以我将所有内容都保存在文件中,但这将有助于清理它! – Chris