tagtag
Goto Top

Syntax für Batch Datei mit Call Befehl gesucht

Hallo werte Admins, ich hoffe mit Eurer Hilfe folgendes Problem mit einer Batch-Datei lösen zu können.

Ich möchte gern eine Batch-Datei durch eine andere Batch-Datei ausführen bzw. starten. Leider konnte ich trotz Google und viel Zeitaufwand nichts Brauchbares zustande bringen, da ich auf diesem Gebiet leider auch nicht viel Ahnung habe. Nun hoffe ich hier Hilfe zu finden. Folgende Problemstellung:

Auf einem USB-Stick befindet sich ein Ordner. In diesem wiederum eine Datei mit Namen "start.bat". Diese würde ich gern durch eine weitere Batch-Datei starten bzw. ausführen wollen, welche außerhalb dieses Ordners, quasi im Stammverzeichnis des Sticks liegt. Ich habe es mit der folgenden Syntax probiert, welche ich mir sozusagen zusammengegoogelt habe. Aber leider funktioniert diese nicht und ich habe keine Ahnung warum.

call \Ornername\start.bat

Ich hoffe, dass Ihr mir den Fehler in der Syntax oder andere Lösungsansätze aufzeigen könnt. Erwähnenswert ist evtl. noch, dass der Stick an ständig wechselnden Rechnern genutzt werden soll und daduch auch der Laufwerksbuchstabe des Sticks immer anders sein kann.

Für Hilfe vielen Dank im Voraus!

TAGTAG

Content-ID: 202774

Url: https://administrator.de/contentid/202774

Ausgedruckt am: 26.11.2024 um 12:11 Uhr

64748
64748 05.03.2013 aktualisiert um 00:14:13 Uhr
Goto Top
Hallo,

die Umgebungsvariable für "Current Directory" in Windows ist %cd%. Das ist wichtig, damit Du unabhängig vom Laufwerksbuchstaben bist (der sich ja für USB-Sticks ändern kann bzw. von Computer zu Computer verschieden ist). Also sollte
%cd%\Ordnername\start.bat
die Batchdatei ausführen. Das kannst Du so in eine Batch-Datei schreiben, welche im Stammverzeichnis des Sticks liegt.

Markus
bastla
bastla 05.03.2013 um 00:19:00 Uhr
Goto Top
@ hmarkus
Da aber %cd% nur das ohnehin aktuelle Verzeichnis angibt, tut's auch einfach
Ordnername\start.bat
Grüße
bastla
64748
64748 05.03.2013 um 00:20:58 Uhr
Goto Top
Zitat von @bastla:
@ hmarkus
Da aber %cd% nur das ohnehin aktuelle Verzeichnis angibt, tut's auch einfach
Ordnername\start.bat
> 
Grüße
bastla
Da hab ich wohl zu weit gedacht face-wink
Danke für die Korrektur.

Markus
rubberman
rubberman 05.03.2013 aktualisiert um 00:25:51 Uhr
Goto Top
Hallo Zusammen.

Relative Pfadangaben sind schon möglich. Genau genommen funktioniert die Syntax genau so bei mir im Test (auch wenn der führende Backslash nicht einmal nötig ist, wenn du dich im Rootverzeichnis befindest).

Die Ursache dafür, dass es trotzdem fehlschlägt ist also woanders zu suchen:
  • der Pfad enthält Leerzeichen
  • der Pfad enthält Sonderzeichen (wie zB. &)
  • der Pfad enthält Umlaute oder ß
  • die Batchdatei wurde "Als Administrator" ausgeführt und das Arbeitsverzeichnis ist somit automatisch %systemroot%\system32

Magst du etwas konkretisieren bzw. trifft irgend etwas davon zu?

Grüße
rubberman
TAGTAG
TAGTAG 05.03.2013 um 09:45:01 Uhr
Goto Top
Hallo und vielen Dank für die schnellen Antworten! Ich habe so das Gefühl hier wird mir endlich geholfen. Aber folgende Fragen stellen sich mir bei den oben genannten Syntax:

%cd%\Ordnername\start.bat

bzw.

Ordnername\start.bat

Fehlt da nicht noch davor ein Befehl wie "start" (für .exe Dateien) bzw. "call" (für .bat Dateien)? Aber leider funktionieren beide Varianten trotzdem nicht bei mir.
Damit käme ich zu "rubberman"s Ursachen für die Disfunktion. Die ersten 3 Punkte kann ich nach Kontrolle ausschließen. Aber gern könnt auch Ihr Euch mal "meiner" Syntax annehmen, welche ich nachfolgend mal direkt aus meiner (nicht funktionierenden) Batch kopiert habe um Tippfehler zu vermeiden.

call \Tresor\start.bat

Mit dieser Batch Datei (liegt im Stammverzeichnis) möchte ich gern die Batch Datei "start.bat" starten, welche im Ordner "Tresor" liegt und die nachfolgende (funktionstüchtige) Syntax enthält.

TrueCrypt.exe /ly /q /a /c n /m rm /v /e GEHEIM
action=Mount TrueCrypt Volume

Habe es auch ohne den call Befehl probiert - leider ohne Erfolg. Zwar poppt für Millisekunden ein schwarzes DOS Fenster auf, aber die zu startende (funktionierende) Batch (start.bat) wird nicht oder ohne Erfolg (?) ausgeführt.

Falls der letzte Fehlerpunkt von "rubberman" zutrifft und ich die Batch als Admin gestartet habe (arbeite mit Admin Benutzerkonto) bzw. starten möchte, was müsste denn dann geändert werden?
Bitte immer unter der Prämisse des wechselnden Laufwerksbuchstaben und wechselnder Rechner (Betriebssysteme wie WinXP, Vista, 7), an welche der Stick gesteckt werden soll.

Freue mich auf weitere Antworten und vielen Dank im Voraus!

TAGTAG
106543
106543 05.03.2013 um 09:57:29 Uhr
Goto Top
Hallo,

setz doch mal ein
echo "Die Batch wird ausgeführt!"  
vor deinen TrueCrypt-Befehl face-smile
und am Ende der Batch ein
pause
dann solltest du auch sehn, was in der anderen DOS_Box passiert face-smile
btw. müsste doch glaub ich
start TrueCrypt.exe ...
heißen oder ?

Mit allerfreundlichsten Grüßen
Exzellius
TAGTAG
TAGTAG 05.03.2013 um 10:33:07 Uhr
Goto Top
Hallo Exzellius, danke für Deine Antwort. Also in der zu startenden Batch steht vor dem "TrueCrypt" kein "start", aber bei direktem Doppelklick funktioniert sie ohne Probleme.

Habe Deinen Rat befolgt und habe "echo ..." und "pause" eingefügt. Nun erhielt ich nach dem Startversuch über die andere Batch folgende Ausgabe in der DOS-Box:

Der Befehl "TrueCrypt.exe" ist entweder falsch geschrieben oder konnte nicht gefunden werden.
O:\>action=Mount TrueCrypt Volume
Der Befehl "action" ist entweder falsch geschrieben oder konnte nicht gefunden werden.

Nun wundert es mich, das diese zu startende Batch bei Ausführung mit Doppelklick (also direkt) geht, aber bei Start durch die andere Batch nicht funktioniert (s. Fehler).???

Hoffe auf weitere Tips und danke im Voraus!

TAGTAG
106543
106543 05.03.2013 um 10:42:07 Uhr
Goto Top
Hallo,

dachte ich mir schon, dass die Batch aufgerufen wird aber nichts bei rauskommt face-smile
es ist etwas anderes, wenn du eine Batch per Doppelklick aufführst, oder in einer anderen Batch aufrufst :
ich kenne mich persönlich mit TrueCrypt nicht aus, allerdings setze doch bitte mal das so um:
start "" TrueCrypt.exe /ly /q /a /c n /m rm /v /e GEHEIM  
action=Mount TrueCrypt Volume
ich gehe hierbei davon aus, dass der TrueCrypt-Befehl soweit richtig ist, weil ich mich wie gesagt damit leider garnicht auskenne face-smile

Grüße
Exzellius
TAGTAG
TAGTAG 05.03.2013 um 12:29:18 Uhr
Goto Top
Die erste Zeile funktioniert nun, nachdem ich hinter "" noch den Pfad wie folgt angegeben habe:

start "" \Tresor\TrueCrypt.exe ...

leider hakt es nun scheinbar an der 2. Zeile, da kommt die Fehlermeldung, dass das Volume nicht gefunden werden kann in einem Windows-Fenster. Muss ich eventuell den Ordner/Pfad in welchem das Volume liegt nun auch als:

action=Mount \Tresor\TrueCrypt Volume

angeben, wobei Tresor der Orndername ist?

Viele Grüße
TAGTAG
106543
106543 05.03.2013 um 12:40:11 Uhr
Goto Top
Hi,

gut dass das nun schonmal funktioniert, allerdings kann ich dir bei TrueCrypt nicht weiterhelfen face-smile
was allerdings sein könnte (reine Spekulation) ist, dass es "TrueCrypt Volume" heißen muss -> Anführungszeichen

Grüße
Exzellius
TAGTAG
TAGTAG 05.03.2013 um 13:00:42 Uhr
Goto Top
klappt leider nicht face-sad
Kann die folgende Batch-Datei nur direkt (mit Doppelkick) korrekt ausführen.

TrueCrypt.exe /ly /q /a /c n /m rm /v /e GEHEIM
action=Mount TrueCrypt Volume

Leider muss diese dabei direkt im Ordner mit der TrueCrypt Datei sein. Da mir das so nicht gefällt, wollte ich sie ja auch vom Stammverzeichnis aus mit einer anderen Batch zum laufen animieren.

Hab es nun mal aus Verzweiflung mit einer einfachen Verknüpfung probiert. Das komische dabei ist nur, auf einem Stick funktioniert es trotz wechselnder Laufwerksbuchstaben, beim anderen Stick nicht.

Langsam bin ich echt am verzweifeln. Gibt es ggf. noch Lösungsansätze zum Start einer Batch (in einem Ordner) vom Stammverzeichnis des USB-Sticks aus? Bitte sehr um weitere Hilfe! Danke im Vorraus!

MfG TAGTAG
106543
106543 05.03.2013 um 13:06:57 Uhr
Goto Top
Hallo,

ist ja klar, dass es nicht funktionieren kann, weil das Script welches im Root-Verzeichnis des Sticks liegt dann sucht er auch im Root-Verzeichnis des Sticks nach TrueCrypt.exe.
Mit "\Tresor\TrueCrypt.exe" findet er die .exe
Ich weiß nur die Syntax des "action"-Befehls nicht :D das ist mein Problem.
ist TrueCrypt Volume eine Datei, die in \Tresor liegt, dann versuche \Tresor\TrueCrypt Volume

Grüße
Exzellius
TAGTAG
TAGTAG 05.03.2013 um 13:19:49 Uhr
Goto Top
Hab ich bereits ohne Erfolg versucht. Allerdings heißt dieses Volume "GEHEIM". Aber die Ausführung funktioniert ja trotzdem, allerdings nur bei direktem Start (Doppelklick) und aus dem Ordner heraus.
106543
106543 05.03.2013 um 13:45:37 Uhr
Goto Top
Hi,

entschuldige aber ich hab leider keine Ahnung wie TrueCrypt funktioniert face-sad
da wird dir jemand anders helfen müssen.
Vielleicht @bastla

Mit freundlichen Grüßen
Exzellius
rubberman
rubberman 05.03.2013 aktualisiert um 19:15:17 Uhr
Goto Top
Hallo Zusammen.

So ungewöhnlich ist das alles gar nicht.
Testumgebung:
D:
 |- testverzeichnis
 |    |
 |    |- test2.bat
 |
 |- test1.bat

test1.bat
@echo off &setlocal
call "testverzeichnis\test2.bat"  

test2.bat
@echo off &setlocal
echo **********
echo Ich bin "%~f0".  
echo Ich arbeite in "%cd%"  
echo **********
pause

Ich starte "test2.bat" direkt. Ausgabe:
**********
Ich bin "D:\testverzeichnis\test2.bat".
Ich arbeite in "D:\testverzeichnis"
**********
Drücken Sie eine beliebige Taste . . .

Ich starte "test1.bat" und rufe mit ihr "test2.bat" auf. Ausgabe:
**********
Ich bin "D:\testverzeichnis\test2.bat".
Ich arbeite in "D:\"
**********
Drücken Sie eine beliebige Taste . . .

Und nun ist schon klar dass das Arbeitsverzeichnis aus "test1.bat" übernommen wird.

Abhilfe schafft bspw die Änderung von "test2.bat" wie folgt:
@echo off &setlocal

pushd "%~dp0"  

echo **********
echo Ich bin "%~f0".  
echo Ich arbeite in "%cd%"  
echo **********

popd

pause

truecrypt.exe aber ohne START Befehl ausführen, da der Prozess sonst asynchron läuft.

Grüße
rubberman
TAGTAG
TAGTAG 05.03.2013 um 21:11:42 Uhr
Goto Top
Erst einmal vielen Dank für die große Mühe!!! Das ist für einen Anfänger wie mich erst mal ein bißchen viel input, ich werde es mir auf jeden Fall mal genau ansehen und versuchen mitzudenken face-wink
Habe das Problem erst mal anders gelöst. Die Bactch im Ordner starte ich nun nicht durch eine andere Batch im Stammverzeichnis, sondern habe sie einfach in exe-Dateien konvertiert, welche ich mit einem Start-Menü-Tool namens PStart starten kann. Trotzdem noch mal vielen Dank an alle! Ein tolles Forum!

Viele Grüße

TAGTAG
rubberman
rubberman 05.03.2013 um 22:09:40 Uhr
Goto Top
Hallo TAGTAG,

Das ist für einen Anfänger wie mich erst mal ein bißchen viel input
Naja, eigentlich dachte ich, dass es genau so am einfachsten zu verstehen und nachzuvollziehen ist.
Die Kurzfassung:
Relative Pfadangaben beziehen sich auf das Arbeitsverzeichnis. Wenn du das Batchfile per Doppelklick startest, ist das Arbeitsverzeichnis gleich dem Verzeichnis in dem die Batchdatei liegt. Rufst du statt dessen aus einem anderen Batch auf, ist das Arbeitsverzeichnis das des aufrufenden Batchfiles. Das ist der Grund warum truecrypt.exe nicht gefunden wurde und sicherlich der Grund, warum auch das Verzeichnis GEHEIM nicht gefunden wurde (liegt bei dir auch im Verzeichnis Tresor nehme ich an). %~dp0 enthält Laufwerk und Pfad des gerade laufenden Batchfiles. PUSHD wechselt das Arbeitsverzeichnis, mit POPD wechselst du wieder zurück.

sondern habe sie einfach in exe-Dateien konvertiert
Brrr - Da sträuben sich mir die Nackenhaare!

Grüße
rubberman
106543
106543 06.03.2013 um 15:48:42 Uhr
Goto Top
Hi,

nicht nur dir ...
aber wenn TAGTAG damit zufrieden ist, dann möchte ich dich bitte darum bitten, dass du den Beitrag auf gelöst setzt.

Mit freundlichen Grüßen
Exzellius
TAGTAG
TAGTAG 06.03.2013 um 16:08:57 Uhr
Goto Top
Hallo und danke noch mal für Eure Mühe. Weiß zwar nicht was nach Eurer Meinung gegen eine .exe spricht, aber da hat sicher jeder seine Ansichten. Mit dem genannten Menü-Tool lassen sich im übrigen auch die Batch-Dateien in das Menü einbinden und starten. Läuft problemlos. Den Beitrag von rubberman habe ich mir noch mal genauer angesehen und glaube, das ich auch diese Variante jetzt "begriffen" habe. Werde sicher in Zukunft noch ein bißchen mehr in die Welt der Batch-"Programmierung" einsteigen, ist intressant. Also noch mal Dank an alle! Problem gelöst!