2012-04-09 782 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 
相關問題