我创建了一个批处理文件,它会自动将 .sql 文件复制到安装的 Jasper 服务器的路径(它可以是任何软件安装目录)。
这是我的批处理脚本——
C:\PROGRA~2\JASPER~1.0\mysql\bin\mysql.exe -u root -proot < create_database.sql
当 jasper 安装在 Program Files(x86) 中时,这是有效的。我如何将它概括为 Program Files 和 Program Files(x86)。
我创建了一个批处理文件,它会自动将 .sql 文件复制到安装的 Jasper 服务器的路径(它可以是任何软件安装目录)。
这是我的批处理脚本——
C:\PROGRA~2\JASPER~1.0\mysql\bin\mysql.exe -u root -proot < create_database.sql
当 jasper 安装在 Program Files(x86) 中时,这是有效的。我如何将它概括为 Program Files 和 Program Files(x86)。
这是我从以下来源复制的一种方法:http: //social.msdn.microsoft.com/Forums/zh/winforms/thread/69dc2aac-9956-40a0-9826-da48b9003a8e
SET ProgFiles86Root=%ProgramFiles(x86)%
IF NOT "%ProgFiles86Root%"=="" GOTO win64
SET ProgFiles86Root=%ProgramFiles%
:win64
"%ProgFiles86Root%\name of program" "arguments, etc."
您想使用环境变量来查找这样的内容。在 32 位 Windows 上,%ProgramFiles%
是您的朋友。
在 64 位 Windows 上,事情有点复杂,因为应用程序可以安装在%ProgramFiles%
和%ProgramFiles(x86)%
.
如果您无法通过其他方式查找 Jasper 的位置(注册表?已安装的程序设置?),最好的办法是同时查看这两个位置,然后选择您可以找到预期目录的位置。
编辑 看到nsis标签 - 您正在创建安装程序吗?在这种情况下,常量$ProgramFiles可能很有用。
在 NSIS 中,您通常可以假装 x64 不存在并使用$programfiles
在批处理文件中;如果定义了%ProgramFiles(x86)%,那么您可以假设您在 64 位系统上,并且 %ProgramFiles(x86)% 是 32 位文件夹,而 %ProgramFiles% 是 64 位文件夹。您还可以检查 PROCESSOR_*:PROCESSOR_ARCHITEW6432是为在 64 位系统上运行的 32 位批处理文件定义的。PROCESSOR_ARCHITECTURE 是 x86-64/AMD64 位批处理文件的 AMD64(请记住,PROCESSOR_ARCHITECTURE 不仅仅是 x86 或 AMD64,还有 IA64 和 NT4 甚至更多值)
您还应该记住,变量可以由用户更改或可能根本不存在,因此如果您使用 NSIS 生成批次,最好使用 NSIS 为您提供的完整路径...
简单的事情怎么样,
if exist "C:\Program Files (x86)" goto 64bit
goto 32bit
:32bit
(whatever u want to happen for the 32bit system)
:64bit
(whatever u want to happen for the 64bit system)
我有一个像这样设置的脚本,并且适用于两个系统。
对不起,它不想保持格式正确的双倍间距。
这是我的做法:
GOTO %PROCESSOR_ARCHITECTURE%
:AMD64
<64Bit code>
EXIT
:X86
<32bit code>
EXIT
似乎@RenniePet 的答案很好。对于另一种选择,这是我做的方式。从这里的答案,主要来自@Samuel的答案,没有一个太有效和抄袭。使用此解决方案,仅依赖目录结构:没有参考环境变量。
@echo off
dir "C:\Program Files (x86)\\." > NUL 2>&1
if errorlevel 0 (
set PROGRAMS_HOME="C:\Program Files (x86)"
GOTO HomeSet
)
dir "C:\Program Files\\." > NUL 2>&1
if errorlevel 0 (
set PROGRAMS_HOME="C:\Program Files"
GOTO HomeSet
)
GOTO NotWindows
:HomeSet
set PROGRAMS_HOME=%PROGRAMS_HOME:"=%
echo PROGRAMS_HOME set to *%PROGRAMS_HOME%*
:NotWindows