批处理文件if语句不起作用

时间:2013-12-16 18:12:46

标签: batch-file cmd

我正在尝试将此批处理文件复制到DLL上,并将其复制到正确的文件夹,具体取决于天气是否为64位机器。

这是批处理文件代码:

c:
IF EXIST c:\Program Files (x86)\Latitude Software\bin\\.(
cd\Program Files (x86)\Latitude Software\bin
xcopy c:\collectdb\*.dll /y
)

c:
IF EXIST c:\Program Files\Latitude Software\bin\\.(
cd\Program Files\Latitude Software\bin
xcopy c:\collectdb\*.dll /y
)

PAUSE

将它们正确复制到我机器上的64位文件夹中。但是当它检查是否c:\ Program Files \ Latitude Software \ bin \时。存在它似乎回来了,因为它试图再次执行下面的代码。

要清楚c:\ Program Files \ Latitude Software \ bin \。不存在。

我的IF语句不正确吗?

2 个答案:

答案 0 :(得分:1)

考虑到您的原始问题是确定机器是否为64位 - 我建议使用%PROCESSOR_ARCHITECTURE%环境变量。 如果没有安装x86程序,我不确定Windows是否创建“c:\ Program Files(x86)”文件夹。 如果默认情况下“Program Files(x86)”文件夹不存在 - 您的方法可能会失败。

    echo %PROCESSOR_ARCHITECTURE%
    if "%PROCESSOR_ARCHITECTURE%"=="x86" (
      echo Processor architecture is x86
      rem your code here
    ) else (
      echo Processor architecture is amd64
      if not exist "c:\Program Files (x86)" (
        mkdir "c:\Program Files (x86)"
        rem your code here
      )
    )

答案 1 :(得分:0)

问题是在另一个答案中提到的缺少引号,而在括号成为另一个问题之前的空格也是如此。

以下是另一种解决问题的方法:

@echo off
IF EXIST "c:\Program Files (x86)\Latitude Software\bin\" (
    cd /d "c:\Program Files (x86)\Latitude Software\bin"
    xcopy "c:\collectdb\*.dll" . /y
  ) else (
    if exist "c:\Program Files\Latitude Software\bin\" (
       cd /d "c:\Program Files\Latitude Software\bin"
       xcopy "c:\collectdb\*.dll" . /y
    )
 )