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

如何使用windows批处理脚本处理回车?,windows,string,batch-file,cmd,Windows,String,Batch File,Cmd,我想用bat自动化我的一些工作。它应该首先查找某个注册表项的值,然后将一些文件复制到注册表项值中包含的目录。 我使用reg query命令查找注册表,例如: REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE 结果似乎包含回车,我需要删除它,我尝试了一些解决方案,但都失败了。有人能帮我吗?对于这种特殊情况,您可以从以下内容开始: for /

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

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%
设置为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

因此,您知道它正在按照您的意愿进行设置。

对于该特定情况,您可以从以下内容开始:

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

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

+1这就是我的想法。如果该值包含空格,则可以将
用于/f“tokens=2*”..
。该网站给出了一些解释:@Pax,我已经尝试过你的解决方案。我将结果重定向到一个txt文件:echo%x%>1.txt它仍然包含回车符。对于该语句,它还返回false:如果%x%==“x86”@eric,echo将添加自己的行尾,这就是它显示在文件中的原因。如果
失败,原因是引号-引号应该在
==
的两边,或者两边都没有。如果你看一下我答案底部的更新脚本,你就会明白我的意思——它将
arch
正确设置为
x86
,当然假设你的体系结构实际上是x86。+1这就是我的想法。如果该值包含空格,则可以将
用于/f“tokens=2*”..
。该网站给出了一些解释:@Pax,我已经尝试过你的解决方案。我将结果重定向到一个txt文件:echo%x%>1.txt它仍然包含回车符。对于该语句,它还返回false:如果%x%==“x86”@eric,echo将添加自己的行尾,这就是它显示在文件中的原因。如果
失败,原因是引号-引号应该在
==
的两边,或者两边都没有。如果你看一下我答案底部的更新脚本,你就会明白我的意思——它将
arch
正确设置为
x86
,当然假设你的体系结构实际上是x86。