我想用bat来自动完成我的一些工作。它应该首先查找某个注册表项的值,然后将一些文件复制到包含在注册表项值中的目录中。 我使用 reg query 命令来查找注册表,例如:
REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE
结果似乎包含回车,我需要删除它,我尝试了一些解决方案,但都失败了。有谁可以帮助我?
答案 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
所以你知道它是按你的意愿设置的。