2012-04-09 104 views
13

我已经创建了一个批处理文件,它会自动将.sql文件复制到安装的Jasper服务器的路径(它可以是任何软件安装目录)。如何创建适用于Program Files和Program Files(x86)的批处理文件?

这是我的批处理script--

C:\ PROGRA〜2 \ JASPER〜1.0 \ MySQL的\ BIN \ -u的mysql.exe根-proot < create_database.sql

正在工作时jasper安装在Program Files(x86)中。 我怎么能概括它的程序文件和程序文件(x86)。

+0

那么“Archivos de programa”呢? – 2012-04-09 09:28:46

+0

C:\ PROGRA〜2可能是任何文件夹,对最终用户机器上的8.3名称代不知道... – Anders 2012-04-09 09:33:01

+0

目前我找不到任何东西来备份它,但是我很确定C:\ PROGRA〜1总是要指向C:\ Program Files文件夹,以及以下内容:C:\ PROGRA〜1 == C:\ Program Files文件' 'C: \ PROGRA〜2 == C:\ Program Files(x86)' 'C:\ PROGRA〜3 == C:\ ProgramData' 'C:\ DOCUME〜1 == C:\ Documents and Settings' 'C :\系统〜1 == C:\系统卷信息.. ..我可能是错的,但.. – wasatchwizard 2013-08-16 08:56:21

回答

17

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

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

如果您不能查找贾斯珀的位置,一些其他的方式(注册表?安装的程序设置?),最好的办法是看在这两个地方,走一个,你找到预期的目录。

编辑 只见NSIS标签 - 你创建一个安装程序?在这种情况下,常数$ProgramFiles可能会有用。

+0

是的,我正在创建一个使用NSIS脚本的安装程序,我怎样才能编写上面的脚本为NSIS。 – Sharad 2012-04-09 12:12:40

+0

如果我使用$ ProgramFiles它只搜索Program Files目录,并且如果我的Jasper目录在Program Files(x86)目录中,则它不起作用。 – Sharad 2012-04-10 05:28:09

2

在NSIS一般来说您可以假装64不存在,只是使用$programfiles

在一个批处理文件;如果%ProgramFiles(x86)%被定义,那么你可以假定你在64位系统上,%ProgramFiles(x86)%是32位文件夹,%ProgramFiles%是64位文件夹。您还可以检查PROCESSOR_ *:PROCESSOR_ARCHITEW6432是针对在64位系统上运行的32位批处理文件定义的。 PROCESSOR_ARCHITECTURE是AMD64的X86-64/AMD64位批处理文件(请记住,PROCESSOR_ARCHITECTURE不仅仅是x86或AMD64,也有IA64和NT4甚至更多的值)

你还应该记住的变量,可以由用户更改或可能根本不存在,所以如果您使用NSIS生成批次,那么最好使用NSIS为您提供的完整路径...

+0

我如何解决UAC问题,因为我创建的exe在一些系统上不适用于所有系统? – Sharad 2012-04-09 11:19:22

+0

有什么问题? – Anders 2012-04-09 17:33:00

+0

其实我创建的安装程序并不适用于所有系统。它给权限错误。 – Sharad 2012-04-09 17:52:45

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

我相信这将是一个“更正确”的答案,因为我试图使用“IF EXFORM”语句使用'%ProgramFiles%'和'%% ProgramFiles(x86)%',但它不会正常工作。这解决了这个问题,因为它确定了哪个目录是可用的,并且只用正确的文件路径执行了程序。然而,被接受为答案的另一种方法对于确定是否存在这样的x86或x64系统并不“足够聪明”。非常感谢你。 – Travis 2014-10-21 20:14:10

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) 

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

抱歉双排间距,它不想让格式正确无误。

0

这是我如何做到这一点:

GOTO %PROCESSOR_ARCHITECTURE% 

:AMD64 
<64Bit code> 
EXIT 

:X86 
<32bit code> 
EXIT 
0

好像@RenniePet回答是好。另一个选择是我做到这一点。没有太有效,从解答here一起那儿剽窃,主要是从@塞缪尔的答案。有了这个解决方案,只需要依赖目录结构:没有引用环境变量。

@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 
相关问题