Batch file Batch Reg Query正在向输出文件中添加意外的空行

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

我正在运行一个批处理文件,它使用“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%
@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上…我想我找到了答案。我认为你只需要双引号,如果有一个空间的注册表值,我正在寻找,但没有双引号的值是在哪里我得到的空白行。双引用一切不是解决办法,但我把问题缩小到:它发生在关键没有双引号“围绕”键。我尝试添加它,但它只是说找不到密钥,即使以前是。感谢您花时间回复。我将继续使用脚本删除空行。不过,我将应用你关于裁员的一些建议。我正在使用一个由同事启动的程序,因此我将所有内容都与文件中已有的内容保持一致,但这将有助于清理它!