Batch file 循环批处理,附加到文本文件,错误,注册表查询,Win XP vs Win 7

Batch file 循环批处理,附加到文本文件,错误,注册表查询,Win XP vs Win 7,batch-file,for-loop,text,registry,echo,Batch File,For Loop,Text,Registry,Echo,问题和当前输出:%file3%(~dp0%computername%-programs\u unsorted.txt)未在使用Win XP x86的计算机上创建。但是,%file3%是在一个Win 7 x86上创建的 需要使用以下输出创建%file3%(例如): 批次代码: @echo OFF setlocal enableextensions enabledelayedexpansion set "Version_tool=v39" SET "file3=%~dp0%computernam

问题和当前输出:
%file3%
(~dp0%computername%-programs\u unsorted.txt)未在使用Win XP x86的计算机上创建。但是,
%file3%
是在一个Win 7 x86上创建的

需要使用以下输出创建%file3%(例如):

批次代码:

@echo OFF
setlocal enableextensions enabledelayedexpansion 
set "Version_tool=v39"

SET "file3=%~dp0%computername%-programs_unsorted.txt"
If Exist %file3% Del %file3%

Rem -------- Win XP x86 commands ---------
:WinXPx86
echo Win XP x86...
for /f "tokens=* delims=" %%A in (
'REG Query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" /S ^| find "DisplayName"'
) do echo %%A %%B %%C %%D %%E>> %file3%
pause

for /f "tokens=* delims=" %%A in (
'REG Query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" /S ^| find "QuietDisplayName"'
) do echo %%A %%B %%C %%D %%E>> %file3%
echo %computername%-programs_unsorted.txt created ...
pause
goto Continue

此批处理代码段在XP或Win7上都无法正常工作。我为
%file3%
设置了一个值,以便在我的系统上运行它

%file3%
只要delims为空(“delims=”),就不会在任何版本的Windows上为我编写。如果我在等号(“delims=”)后面加一个空格,我将得到如下输出

在两个Windows版本上,我都会得到一个如下所示的文件:

    DisplayName    REG_SZ    Microsoft Help Viewer 1.1 %B %C %D %E
    DisplayName    REG_SZ    Microsoft Team Foundation Server 2010 Object Model - ENU %B %C %D %E
    DisplayName    REG_SZ    Microsoft Visual Studio 2010 Tools for Office Runtime (x64) %B %C %D %E
    DisplayName    REG_SZ    Intel(R) Network Connections Drivers %B %C %D %E
    DisplayName    REG_SZ    Microsoft Sync Framework Services v1.0 SP1 (x64) %B %C %D %E

    ...
%%A保存完整行的值,因为“tokens=*”表示整行是一个令牌。从中获取命令行帮助:

如果tokens=字符串中的最后一个字符是星号,则 分配额外的变量并接收上的剩余文本 解析最后一个标记后的行

因此,每一行都存储在%%A中,而其他变量则作为它们自己的名称被吐出

要实现您描述的输出,请更改FOR命令。添加空格作为分隔符并更改所需的标记。在XP中,使用“tokens=2,*”,在Win7中使用“tokens=3,*”。下面是一个XP示例:

for /f "tokens=2,* delims= " %%A in (
'REG Query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" /S ^| find "DisplayName"'
) do echo %%A %%B>> %file3%
当我进行这些更改时,XP和Win7中的程序输出如下所示:

Microsoft Help Viewer 1.1
Microsoft Team Foundation Server 2010 Object Model - ENU
Microsoft Visual Studio 2010 Tools for Office Runtime (x64)
Intel(R) Network Connections Drivers
Microsoft Sync Framework Services v1.0 SP1 (x64)

在XP上,列出了大量的安全更新。“ParentDisplayName”也被XP上的查找过滤器匹配。我不知道你是否想改变这种状况。它列出了许多重复项。

在cmd中的Win XP上,命令
REG Query“HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall”/S | find“DisplayName”
起作用,但是%file3%不能使用您给出的批处理代码创建。请给我一些建议,对我来说很有效。我无法解释它,除非“delims=”中的等号后面没有空格,或者如果没有设置file3变量。您最初的示例代码没有设置它,但我看到您已经更新了它,所以我不知道。
Microsoft Help Viewer 1.1
Microsoft Team Foundation Server 2010 Object Model - ENU
Microsoft Visual Studio 2010 Tools for Office Runtime (x64)
Intel(R) Network Connections Drivers
Microsoft Sync Framework Services v1.0 SP1 (x64)