如何创建适用于Program Files和Program Files(x86)的批处理文件?
我已经创建了一个批处理文件,它会自动将.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)。
你想使用环境变量来查找这样的事情。在32位Windows上,%ProgramFiles%
是你的朋友。
在64位的Windows,事情有点复杂,作为应用程序既可以在%ProgramFiles%
和%ProgramFiles(x86)%
安装。
如果您不能查找贾斯珀的位置,一些其他的方式(注册表?安装的程序设置?),最好的办法是看在这两个地方,走一个,你找到预期的目录。
编辑 只见NSIS标签 - 你创建一个安装程序?在这种情况下,常数$ProgramFiles可能会有用。
在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为您提供的完整路径...
下面介绍了一种方法从这个来源: 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."
我相信这将是一个“更正确”的答案,因为我试图使用“IF EXFORM”语句使用'%ProgramFiles%'和'%% ProgramFiles(x86)%',但它不会正常工作。这解决了这个问题,因为它确定了哪个目录是可用的,并且只用正确的文件路径执行了程序。然而,被接受为答案的另一种方法对于确定是否存在这样的x86或x64系统并不“足够聪明”。非常感谢你。 – Travis 2014-10-21 20:14:10
怎么样简单的东西一样,
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回答是好。另一个选择是我做到这一点。没有太有效,从解答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
那么“Archivos de programa”呢? – 2012-04-09 09:28:46
C:\ PROGRA〜2可能是任何文件夹,对最终用户机器上的8.3名称代不知道... – Anders 2012-04-09 09:33:01
目前我找不到任何东西来备份它,但是我很确定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