0

我正在运行一个批处理文件,该文件使用“reg query”命令检查许多注册表文件。我将其设置为向错误日志 (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.
4

2 回答 2

1

请仔细检查。

第一件事情:键名应该NOT终止\-我使用W7并得到不同的结果-终端\与无-\终端

第二件事:IF ERRORLEVEL 0(HKLM\SYSTEM\CurrentControlSet\Control\Session Manager)总是正确的。IF ERRORLEVEL n如果errorlevel是 n或大于 n则为真

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

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

现在 - 矛盾的是,您会发现\从键中删除终端会产生MORE空行。req query输出带有大量空白的间隔良好的报告。报告的值以换行符引入并以另一个终止 - 或者看起来......

于 2013-07-09T00:17:37.613 回答
0

虽然我仍然不知道为什么,但我通过采取不同的方法找到了解决方案。我没有试图找出文件中任意空白行的原因,而是决定找到一种方法来在文件创建后删除这些行。

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

@echo Cleaning File

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

@echo Finished Cleaning File
于 2013-07-08T22:27:47.847 回答