2009-03-03 15 views
2
cd ../../jobs 
set CLASSPATH=.;../xyz.jar;../mysql-connector-java-5.1.6-bin.jar 
java folser.folder1 ../Files/MySQL.xml 
cd .. 

Ich muss die Batch-Datei aus einem beliebigen Verzeichnis ausführen. Ich habe die Pfade für Java festgelegt. Kann mir jemand helfen?So führen Sie die Stapeldatei aus einem beliebigen Ordner aus

+0

Ist das Windows oder Linux? Ihre Verwendung von "/" im cd-Befehl zeigt Linux an, aber Sie sprechen über Batch-Dateien und nicht über Shell-Skripte. – paxdiablo

Antwort

0

Ihre Nachricht war ein wenig verstümmelt, ich nehme an, Sie sagen, dass Java auf dem Pfad ist, aber Sie können Ihre Anwendung nicht ordnungsgemäß aus einer Batch-Datei ausführen. Anscheinend fehlt Ihnen die Klassenpfadoption (-cp) für Java. Versuchen Sie folgendes:

cd ../../jobs 
set CLASSPATH=.;../xyz.jar;../mysql-connector-java-5.1.6-bin.jar 
java -cp %CLASSPATH% folser.folder1 ../Files/MySQL.xml 
cd .. 
+0

Dies beantwortet nicht die Frage des Posters – vladr

+0

Brauchen Sie "-cp"? Ich habe Java zwar automatisch von CLASSPATH abgeholt (obwohl Sie möglicherweise exportieren müssen, anstatt nur zu setzen). – paxdiablo

0

Use% cd% das aktuelle Verzeichnis zu erhalten (das heißt derjenige, der die Batch-Datei lebt in)

z.B.

set JAVA_HOME=%cd%\jdk1.x.x 
set PATH=%JAVA_HOME%\bin;%PATH% 
set CLASSPATH=%JAVA_HOME%\lib\tools.jar;%cd%\lib\myjar.jar;etc,etc 

+0

% cd% ist nicht das Verzeichnis der Stapeldatei, es ist das aktuelle Verzeichnis, z. Ich bin in C: \, ich rufe C: \ test \ batch.bat auf; % cd% ist C: \, nicht C: \ test. – vladr

+0

@Richard -% ~ dp0 würde das Batch-Dateiverzeichnis erhalten – McDowell

3

Unter * nix (zB Linux):

cd "`dirname \"$0\"`" 
# your current directoy is now the script's directory 
cd ../../jobs 
set CLASSPATH=.:../xyz.jar:../mysql-connector-java-5.1.6-bin.jar 
java folder.folder1 ../Files/MySQL.xml 
cd .. 
# when the script terminates, you are automatically 
# back to the original directory 

Unter Windows NT/XP/etc .:

SETLOCAL 
PUSHD . 
REM current directory has been saved and environment is protected 
CD /d %~dp0 
REM your current directoy is now the script's directory 
CD ..\..\jobs 
SET CLASSPATH=.;..\xyz.jar;..\mysql-connector-java-5.1.6-bin.jar 
java folder.folder1 ..\Files\MySQL.xml 
CD .. 
REM before the script terminates, you must explicitly 
REM return back to the original directory 
POPD 
ENDLOCAL 
+0

Ich glaube nicht, dass Sie am Ende für die Windows-Version wieder im ursprünglichen Verzeichnis sind. Sie sollten setlocal/endlocal verwenden, um sicherzustellen, dass Umgebungsänderungen nicht aus dem Skript herauslaufen. Sie müssen möglicherweise auch den aktuellen Pfad und das Laufwerk speichern und wiederherstellen, wenn Sie fertig sind. – paxdiablo

+0

Guter Punkt. Entsprechend aktualisiert. Gute ole 'MS-Implementierung ... – vladr

+0

Und +1. Nun, stopf mich! Ich wusste nicht einmal über Pushd/Popd, ich habe meine PWD in einer Umgebungsvariablen gespeichert. Denken Sie daran, diesen Code beim nächsten Auschecken zu ändern. – paxdiablo

1

Obwohl ich auf Vlads Antwort nicht äußern kann (Kommentare erfordern mehr Punkte als Antworten ?!) Ich würde immer vorsichtig sein:

CD /d %~dp0 

weil Windows nicht zu UNC-Pfaden CD und hat eine unangenehme Angewohnheit, Sie in% windir% stattdessen mit möglicherweise katastrophalen Ergebnissen fallen.

Obwohl es langatmiger ist, ist es normalerweise besser, auf% ~ dp0 (oder eine Variable mit diesem Wert) zu verweisen, wenn Sie einen vollständigen Pfad benötigen.

BAD:

cd /d %~dp0 
rd temp 

GUT:

rd %~dp0\temp 
Verwandte Themen