编写一个简单的批处理文件来设置变量?

时间:2010-05-20 02:04:30

标签: batch-file 64-bit x86-64

我想编写一个简单的批处理文件,我想根据机器架构设置环境变量。如下:

set ARCH=%PROCESSOR_ARCHITECTURE%
echo %ARCH%
if %ARCH%==x86 (
  set JAVA_ROOT=C:\Progra~1\Java\j2re1.4.2_13
) else (
  set JAVA_ROOT=C:\Progra~2\Java\j2re1.4.2_13
)
echo JAVA_ROOT is %JAVA_ROOT%

在架构为'AMD64'的64位机器上,JAVA_ROOT将在echo语句中显示为'C:\ Progra~2 \ Java \ j2re1.4.2_13'。但是当我运行一个使用这个文件的应用程序时,JAVA_ROOT的第一个值将被选中'C:\ Progra~1 \ Java \ j2re1.4.2_13'。即使我在64位Windows7上运行它,我也不知道为什么它会进入'if'部分。当我回应

2 个答案:

答案 0 :(得分:2)

不依赖于x64特定变量的替代解决方案:

IF NOT EXIST %WINDIR%\SysWOW64\regedit.exe GOTO PLATX86
:PLATX64
ECHO PLATFORM IS X64
GOTO PLATDONE
:PLATX86
ECHO PLATFORM IS X86
GOTO PLATDONE
:PLATDONE

它对我有用,也可能适合你。

答案 1 :(得分:0)

如果您在64位Windows上使用%SystemRoot%\syswow64\cmd.exe运行批处理文件,可能是因为您是从32位应用程序启动它,那么%PROCESSOR_ARCHITECTURE%将等于{{1 },而不是x86。要检测此情况,您可以使用AMD64变量。这是一个blog post with more info

但是,如果您只想查找32位Java路径,则不必担心,因为如果您使用%PROCESSOR_ARCHITEW6432%变量,WOW64会为您处理:

%ProgramFiles%

请注意,我避免使用if "%PROCESSOR_ARCHITECTURE%" == "x86" set JAVA_ROOT=%ProgramFiles%\Java\j2re1.4.2_13 if "%PROCESSOR_ARCHITECTURE%" == "AMD64" set JAVA_ROOT=%ProgramFiles(x86)%\Java\j2re1.4.2_13 if not defined JAVA_ROOT ( echo Unsupported processor architecture. exit /b 1 ) if not exist %JAVA_ROOT%\. ( echo Java 1.4.2_13 is not installed. exit /b 1 ) 表单来设置if condition ( command ) else ( command )。这是因为JAVA_ROOT包含括号,如果我使用该表单,会导致%ProgramFiles(x86)%错误地使用if语句。对于更复杂的命令或更复杂的条件,使用cmd.exe调用子例程可能会更好。 (使用更具表现力的语言会更好,但这不能回答这个问题。)