如何创建适用于Program Files和Program Files(x86)的批处理文件?

时间:2012-04-09 09:27:12

标签: batch-file 32bit-64bit nsis batch-processing

我创建了一个批处理文件,它自动将.sql文件复制到已安装的Jasper服务器的路径(可以是任何软件安装目录)。

这是我的批处理脚本 -

C:\ PROGRA~2 \ JASPER~1.0 \ mysql \ bin \ mysql.exe -u root -proot< create_database.sql

在程序文件(x86)中安装jasper时正常工作。 如何为程序文件和程序文件(x86)概括它。

6 个答案:

答案 0 :(得分:25)

这是一种方法,我从这个来源复制了它: 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."

答案 1 :(得分:18)

您想使用环境变量来查找这样的内容。在32位Windows上,%ProgramFiles%是您的朋友。

在64位Windows上,事情有点复杂,因为应用程序可以安装在%ProgramFiles%%ProgramFiles(x86)%中。

如果你不能以其他方式查找Jasper的位置(注册表?已安装的程序设置?),最好的办法是查看两个地方,然后选择找到预期目录的地方。

修改 看到 nsis 标签 - 你在创建一个安装程序吗?在这种情况下,常量$ProgramFiles可能很有用。

答案 2 :(得分:3)

在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为您提供的完整路径...

答案 3 :(得分:1)

如何做一些简单的事情,

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)

我有一个这样的脚本设置,适用于两个系统。

抱歉双倍间距,它不想保持格式正确。

答案 4 :(得分:0)

我是这样做的:

GOTO %PROCESSOR_ARCHITECTURE%

:AMD64
<64Bit code>
EXIT

:X86
<32bit code>
EXIT

答案 5 :(得分:0)

似乎@RenniePet的答案很好。替代方案是我这样做的方式。从答案here开始,主要来自@ Samuel的答案,没有太高效和cri together在一起。使用此解决方案,仅依赖于目录结构:没有参考环境变量。

@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