2012-04-09 10 views
13

Ich habe eine Batchdatei erstellt, die automatisch eine .sql-Datei in den Pfad des installierten Jasper-Servers kopiert (dies kann ein beliebiges Software-Installationsverzeichnis sein).Wie erstellt man eine Batch-Datei, die sowohl für Programm- als auch für Programmdateien (x86) funktioniert?

Das ist mein Batch script--

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

, dass die Arbeit, wenn Jaspis wird in Programmdateien (x86) installiert. Wie kann ich es für beide Programme und Programmdateien (x86) verallgemeinern.

+0

Was ist mit "Archivos de programa"? –

+0

C: \ PROGRA ~ 2 könnte ein beliebiger Ordner sein, Sie wissen nichts über die Namensgenerierung von 8.3 auf dem Computer des Endbenutzers ... – Anders

+0

Ich kann im Moment nichts finden, um es zu unterstützen, aber ich bin es ziemlich sicher, dass C: \ PROGRA ~ 1 wird immer auf den Ordner C: \ Programme verweisen, sowie die folgenden .. 'C: \ PROGRA ~ 1 == C: \ Programme' ' C: \ PROGRA ~ 2 == C: \ Programme (x86) ' ' C: \ PROGRA ~ 3 == C: \ ProgramData' 'C: \ DOCUME ~ 1 == C: \ Dokumente und Einstellungen' ' C : \ SYSTEM ~ 1 == C: \ System Volume Information' .. Ich könnte mich aber irren. – wasatchwizard

Antwort

17

Sie möchten Umgebungsvariablen verwenden, um solche Dinge zu finden. Unter 32bit Windows ist %ProgramFiles% Ihr Freund.

Auf 64-Bit-Windows sind die Dinge etwas komplizierter, da die Anwendung sowohl in %ProgramFiles% als auch in %ProgramFiles(x86)% installiert werden kann.

Wenn Sie den Speicherort von Jasper nicht anders suchen können (Registrierung? Installierte Programmeinstellungen?), Ist Ihre beste Wette, an beiden Orten zu suchen und nehmen Sie den, wo Sie das erwartete Verzeichnis finden.

bearbeiten Sah die nsis tag - erstellen Sie einen Installer? In diesem Fall könnte die Konstante $ProgramFiles nützlich sein.

+0

Ja, ich erstelle ein Installationsprogramm mit NSIS-Skript, Wie kann ich oben Skript für NSIS schreiben. – Sharad

+0

Wenn ich $ ProgramFiles benutze, sucht es nur nach dem Programm-Verzeichnis und wenn mein Jasper-Verzeichnis im Programm-Verzeichnis (x86) ist, funktioniert es nicht. – Sharad

2

In NSIS können Sie in der Regel nur, dass x64 so tun, als nicht vorhanden ist und verwenden Sie nur in einer Batch-Datei $programfiles

; Wenn %ProgramFiles(x86)% definiert ist, können Sie davon ausgehen, dass Sie sich auf einem 64-Bit-System befinden und dass% ProgramFiles (x86)% der 32-Bit-Ordner und% ProgramFiles% der 64-Bit-Ordner ist. Sie können auch überprüfen, ob PROCESSOR_ *: PROCESSOR_ARCHITEW6432 für eine 32-Bit-Batchdatei definiert ist, die auf einem 64-Bit-System ausgeführt wird. PROCESSOR_ARCHITECTURE ist AMD64 für eine x86-64/AMD64-Bit-Batch-Datei (Denken Sie daran, dass PROCESSOR_ARCHITECTURE nicht nur x86 oder AMD64 ist, sondern auch IA64 und für NT4 noch mehr Werte)

Sie sollten auch bedenken, dass die Variablen sein können Vom Benutzer geändert oder gar nicht vorhanden. Wenn Sie also den Stapel mit NSIS erzeugen, ist es wahrscheinlich besser, die vollständigen Pfade zu verwenden, die NSIS Ihnen gibt.

+0

Wie kann ich das UAC-Problem lösen, weil die Exe, die ich erstellt habe, auf irgendeinem System nicht für alle Systeme funktioniert? – Sharad

+0

Was ist das Problem? – Anders

+0

Eigentlich funktioniert das Installationsprogramm, das ich erstellt habe, nicht für alle Systeme. Es gibt einen Berechtigungsfehler. – Sharad

25

Hier ist eine Möglichkeit, dies zu tun, die ich kopiert habe aus dieser Quelle: 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

Ich glaube, das wäre eine "korrektere" Antwort, da ich "IF EXISTS" -Anweisungen mit '% ProgramFiles%' und '%% ProgramFiles (x86)%' verwenden wollte, aber es würde nicht richtig funktionieren. Dies löste das Problem, da festgestellt wurde, welches Verzeichnis verfügbar war und das Programm mit dem korrekten Dateipfad ausgeführt wurde. Die andere Methode, die als Antwort akzeptiert wurde, ist jedoch nicht "intelligent" genug, um festzustellen, ob es ein x86- oder x64-System gibt. Vielen Dank dafür. – Travis

1

wie über etwas einfaches wie,

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) 

ich habe ein Skript so eingerichtet und funktioniert perfekt für beide Systeme.

Entschuldigung für doppelten Abstand wollte es nicht das Format korrekt zu halten.

0

Hier ist, wie ich es tun:

GOTO %PROCESSOR_ARCHITECTURE% 

:AMD64 
<64Bit code> 
EXIT 

:X86 
<32bit code> 
EXIT 
0

Scheint, wie @RenniePet Antwort gut ist. Für eine Alternative hier ist die Art, wie ich es gemacht habe. Nicht zu effizient und zusammen aus den Antworten here, vor allem aus @ Samuel Antwort.Bei dieser Lösung wird nur die Verzeichnisstruktur verwendet: Es gibt keine Referenzumgebungsvariablen.

@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 
Verwandte Themen