2010-04-23 553 views
0

我想用蝙蝠来自动化我的一些工作。它应该首先查找某个注册表项的值,然后将一些文件复制到包含在注册表项值中的目录中。 我用REG查询命令来查找注册表,如:如何使用Windows批处理脚本处理回车?

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

结果似乎包含回车,我需要将其删除,我已经尝试了一些解决方案,但都以失败告终。任何人都可以帮我吗?

回答

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%到86(对我来说)。

如果上线的第三个值可以包含空格,你需要得到一个有点棘手


下面的脚本显示了一种方式是棘手。它基本上使用调试线从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 

,所以你知道你想要它被设置。

+1

+1这就是我会想出的。如果该值包含空格,则可以使用'for/f“标记= 2 *”...'。这个网站给出了一些解释:http://www.robvanderwoude.com/ntregistry.php – 2010-04-23 09:03:20

+0

@Pax,我试过你的解决方案。我将结果重定向到一个txt文件: echo%x%> 1.txt 它仍然包含回车符。它也返回false为这条语句:if%x%==“x86” – eric2323223 2010-04-23 09:16:28

+0

非常有帮助!谢谢,弗兰克。 – eric2323223 2010-04-23 09:23:23