Batch file Batch Reg Query正在向输出文件中添加意外的空行
我正在运行一个批处理文件,它使用“reg query”命令检查许多注册表文件。我将它设置为向错误日志(ErrorLog.txt)发送错误消息,并告诉用户检查主结果文本文件(REGValues.txt)中的错误日志。问题是我在REGValues.txt文件中得到了这些看似随机的空行。如何防止它插入这些空行 这是我的代码的一段,刚好超过它通常添加到空行的位置Batch file Batch Reg Query正在向输出文件中添加意外的空行,batch-file,registry,Batch File,Registry,我正在运行一个批处理文件,它使用“reg query”命令检查许多注册表文件。我将它设置为向错误日志(ErrorLog.txt)发送错误消息,并告诉用户检查主结果文本文件(REGValues.txt)中的错误日志。问题是我在REGValues.txt文件中得到了这些看似随机的空行。如何防止它插入这些空行 这是我的代码的一段,刚好超过它通常添加到空行的位置 mkdir c:\temp2\ SET dirname=c:\temp2\ SET filename2=REGValues.txt SET
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%
@echo Cleaning File
For /F "tokens=* delims=" %%A in (%RegValues.txt%) Do Echo %%A >> %RegValues_Clean.txt%
@echo Finished Cleaning File
下面是我发送结果的文本文件的外观:
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.
虽然我仍然不知道为什么,但我通过采取不同的方法找到了解决方案。我没有试图找出文件中任意空白行的原因,而是决定在创建文件后找到一种删除这些行的方法
我使用这个命令(放置在批次文件的末尾)来删除空白行。
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%
@echo Cleaning File
For /F "tokens=* delims=" %%A in (%RegValues.txt%) Do Echo %%A >> %RegValues_Clean.txt%
@echo Finished Cleaning File
请仔细检查 第一件事:Keyname应该
而不是终止\
-我使用W7并得到不同的结果\
-终端与否-\
-终端
第二件事:如果ERRORLEVEL 0(HKLM\SYSTEM\CurrentControlSet\Control\Session Manager)始终为真<如果ERRORLEVEL
为n或大于n
第三件事:1>
-1
是多余的(风格问题-或者你喜欢打字?)
第四:脚本开头的@echo on
关闭批处理代码的echo
ing。进一步的@echo
是冗余的-echo
就足够了
现在-矛盾的是,你会发现从键中删除终端\
会产生更多的空行req query
输出一个间隔良好的报告,其中包含大量空白。报告的值以换行符引入,并以另一个换行符终止-或者看起来是这样…您使用的是什么Windows版本?我使用的是Windows 8,但它也出现在Windows 7上…我想我找到了答案。我认为你只需要双引号,如果有一个空间的注册表值,我正在寻找,但没有双引号的值是在哪里我得到的空白行。双引用一切不是解决办法,但我把问题缩小到:它发生在关键没有双引号“围绕”键。我尝试添加它,但它只是说找不到密钥,即使以前是。感谢您花时间回复。我将继续使用脚本删除空行。不过,我将应用你关于裁员的一些建议。我正在使用一个由同事启动的程序,因此我将所有内容都与文件中已有的内容保持一致,但这将有助于清理它!