【问题标题】:Can someone please give an explanation to these different outputs有人可以解释一下这些不同的输出吗
【发布时间】:2016-07-29 15:43:38
【问题描述】:

请查看 2 个示例代码:

@ECHO off

Set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0

REG.exe Query %RegQry% > checkOS.txt

Find /i "x86" < CheckOS.txt > StringCheck.txt


If %ERRORLEVEL% == 0 (
     Echo "This is 32 Bit Operating system"
   set ProgFileDir=%ProgramFiles%
) ELSE (

     Echo "This is 64 Bit Operating System"
      set ProgFileDir=%ProgramFiles(x86)%
)
del checkos.txt
del stringcheck.txt

echo ---------------
echo "%ProgFileDir%"
echo ----------------
pause

这给了我一个错误的输出:

"This is 64 Bit Operating System"
---------------
"C:\Program Files (x86"  <==Notice how the closing brace is trimmed
----------------
Press any key to continue . . .

如果我在括号外更改语句set ProgFileDir=%ProgramFiles(x86)% 的位置:

@ECHO off

Set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0

REG.exe Query %RegQry% > checkOS.txt

Find /i "x86" < CheckOS.txt > StringCheck.txt


If %ERRORLEVEL% == 0 (
     Echo "This is 32 Bit Operating system"
   set ProgFileDir=%ProgramFiles%
) ELSE (

     Echo "This is 64 Bit Operating System"
)
del checkos.txt
del stringcheck.txt

      set ProgFileDir=%ProgramFiles(x86)%
echo ---------------
echo "%ProgFileDir%"
echo ----------------
pause

我得到了正确的结果:

"This is 64 Bit Operating System"
---------------
"C:\Program Files (x86)" <== with the closing brace
----------------
Press any key to continue . . .

我在这里做错了什么?我在 Windows 7 64 位操作系统上运行这个批处理文件。

【问题讨论】:

标签: windows batch-file command-line command command-prompt


【解决方案1】:

我认为您的 .bat 文件与上面的 ( 混淆了 del checkos.txt 另请阅读带有插入符号的前缀:^

@ECHO OFF
Set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0

REG.exe Query %RegQry% > checkOS.txt

Find /i "x86" < CheckOS.txt > StringCheck.txt


If %ERRORLEVEL% == 0 (
     Echo "This is 32 Bit Operating system"
     set ProgFileDir=%ProgramFiles% 

) ELSE (  
ECHO "This is 64 Bit Operating System"
)
set ProgFileDir= %ProgramFiles(x86)%

del checkos.txt
del stringcheck.txt

echo ---------------
echo "%ProgFileDir%"
echo ----------------
pause

还可以阅读 set 命令HERE

【讨论】:

    【解决方案2】:
    @ECHO off
    Set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0
    REG.exe Query %RegQry% > checkOS.txt
    Find /i "x86" < CheckOS.txt > StringCheck.txt
    
    If %ERRORLEVEL% == 0 (
         Echo "This is 32 Bit Operating system"
       set "ProgFileDir=%ProgramFiles%"
    ) ELSE (
    
         Echo "This is 64 Bit Operating System"
          set "ProgFileDir=%ProgramFiles(x86)%"
    )
    del checkos.txt
    del stringcheck.txt
    
    echo ---------------
    echo "%ProgFileDir%"
    echo ----------------
    GOTO :EOF
    

    使用set "var=string" 语法会从解析器的作用域中删除"string",并确保行上的任何尾随空格包含在分配的值中。

    由于programfiles(x86) 中的) 现在在兔子的耳朵里,它是一个字符串的oart,有效地关闭了它的特殊含义(关闭else 子句。)可能使用原始语法的更传统的方式是用插入符号转义),因此:^) 就解析器而言关闭字符的特殊含义并将它们返回为普通字符。

    ??我不确定是否为 32 位操作系统建立了变量 programfiles(x86)。如果是这样,

    set "progfiledir=%programfiles%"
    if defined programfiles(x86) set "progfiledir=%programfiles(x86)%"
    

    似乎会达到相同的结果...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多