首页 文章

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

提问于
浏览
13

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

这是我的批处理脚本 -

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

当jasper安装在Program Files(x86)中时工作正常 . 我如何概括它的程序文件和程序文件(x86) .

6 回答

  • 0

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

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

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

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

  • 25

    这里's one way of doing it, which I' ve从这个来源复制: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

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

  • 18

    简单的事情怎么样,

    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)
    

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

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

  • 2

    我是这样做的:

    GOTO %PROCESSOR_ARCHITECTURE%
    
    :AMD64
    <64Bit code>
    EXIT
    
    :X86
    <32bit code>
    EXIT
    
  • 0

    好像@RenniePet的答案很好 . 替代方案是我这样做的方式 . 没有太多的效率,并且从答案中得到了充分的结合here,主要来自@ 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
    

相关问题