如何使用Windows批处理脚本处理回车?

时间:2010-04-23 08:40:56

标签: windows string batch-file cmd

我想用bat来自动完成我的一些工作。它应该首先查找某个注册表项的值,然后将一些文件复制到包含在注册表项值中的目录中。 我使用 reg query 命令来查找注册表,例如:

REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE

结果似乎包含回车,我需要删除它,我尝试了一些解决方案,但都失败了。有谁可以帮助我?

1 个答案:

答案 0 :(得分:3)

对于这种特殊情况,您可以从:

开始
for /f "tokens=3" %i in ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE ^| findstr PROCESSOR_ARCHITECTURE') do set x=%i

%x%设置为x86(在我的情况下)。

如果该行的第三个值可以包含空格,则需要更加棘手


以下脚本显示了一种更棘手的方法。它基本上使用调试行来生成reg的虚构输出,为您提供带空格的体系结构。

@setlocal enableextensions enabledelayedexpansion
@echo off
for /f "tokens=2*" %%a in ('echo.    PROCESSOR_ARCHITECTURE      REG_SZ  x86 64-bit     grunter') do (
    set arch=%%b
)
echo !arch!
endlocal

输出是:

x86 64-bit grunter

正如预期的那样(请记住它会将多个空格折叠成一个)。 tokens=2*位将令牌2(REG_SZ)放入%%a,将所有后续令牌放入%%b

所以一个好的最终剧本将是:

@setlocal enableextensions enabledelayedexpansion
@echo off
set id=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
set key=PROCESSOR_ARCHITECTURE
for /f "tokens=2*" %%a in ('REG QUERY "!id!" /v !key! ^| findstr !key!') do (
    set arch=%%b
)
echo !arch!
if !arch!==x86 echo arch was x86
endlocal

此脚本输出:

x86
arch was x86

所以你知道它是按你的意愿设置的。