要通过体系结构复制和启动可执行文件的批处

时间:2013-01-31 21:29:55

标签: batch-file login-script

我正在尝试创建一个登录批处理文件,将32位和64位可执行文件从服务器复制到用户的本地计算机,然后根据操作系统类型/体系结构执行这些文件。这是我到目前为止,它似乎没有工作,因为它只启动32位文件,并没有检测和启动64位文件。我是新手,所以任何帮助都会受到赞赏。

@echo off
c:
MD c:\temp
xcopy \\server\NETLOGON\SEPRemoval c:\temp /e /y
cd c:\temp
if /i "%PROCESSOR_ARCHITECTURE%" EQU "x86" goto ARCH32
if /i "%PROCESSOR_ARCHITECTURE%" EQU "AMD64" goto ARCH64


:ARCH32
start /wait SEPprep.exe
goto done

:ARCH64
start /wait SEPprep64.exe
goto done

:done

timeout 15
cd \
del c:\temp /q
exit

3 个答案:

答案 0 :(得分:0)

问题不在于您的批处理文件,而在于您依赖的环境变量不能达到您的预期。

在我的64位Windows 7计算机上,ENV显示:

PROCESSOR_ARCHITECTURE=x86
PROCESSOR_ARCHITEW6432=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 42 Stepping 7, GenuineIntel
PROCESSOR_LEVEL=6

...所以依靠PROCESSOR_ARCHITECTURE来区分32& 64位机器无法正常工作。

主题上 一个Microsoft Knowledge Base article

修复检测处理器架构的方法,你应该没问题。

答案 1 :(得分:0)

查看systeminfo

%SystemRoot%\system32\systeminfo.exe

或类似

的简单
if defined ProgramFiles(x86)

这将检查是否定义了ProgramFiles(x86)环境变量(仅在64位版本的Windows上定义)。

答案 2 :(得分:0)

这是我最终提出的,在Microsoft Scripting Guys论坛上得到了一些人的帮助:

@echo off
c:
MD c:\temp
xcopy \\server\NETLOGON\SEPRemoval c:\temp\ /e /y
cd /d c:\temp
if {%PROCESSOR_ARCHITEW6432%} EQU {} (
  set TRUE_ARCH=%PROCESSOR_ARCHITECTURE%
   start /b /wait SEPprep.exe
   goto Done
) else (
  set TRUE_ARCH=%PROCESSOR_ARCHITEW6432%
  start /b /wait SEPprep64.exe
  goto Done
)
echo Processor Architecture is %PROCESSOR_ARCHITECTURE%

:Done
timeout 15
rd /s /q c:\temp 1>nul 2>nul
exit