如何使用Windows批处理脚本处理回车?
问题描述:
我想用蝙蝠来自动化我的一些工作。它应该首先查找某个注册表项的值,然后将一些文件复制到包含在注册表项值中的目录中。 我用REG查询命令来查找注册表,如:如何使用Windows批处理脚本处理回车?
REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE
结果似乎包含回车,我需要将其删除,我已经尝试了一些解决方案,但都以失败告终。任何人都可以帮我吗?
答
对于特定的情况下,你可以这样开始:
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这就是我会想出的。如果该值包含空格,则可以使用'for/f“标记= 2 *”...'。这个网站给出了一些解释:http://www.robvanderwoude.com/ntregistry.php – 2010-04-23 09:03:20
@Pax,我试过你的解决方案。我将结果重定向到一个txt文件: echo%x%> 1.txt 它仍然包含回车符。它也返回false为这条语句:if%x%==“x86” – eric2323223 2010-04-23 09:16:28
非常有帮助!谢谢,弗兰克。 – eric2323223 2010-04-23 09:23:23