dissi-xd
Goto Top

Wie kann ich mittels einer Batch eine andere Batch in anderem Ordner ausführen und ViceVersa

Hi,

ich bastle mal wieder an meinem Skript herum. Dieses mal möchte ich alle 4 erstellten Skripts, die mittlerweile funktionieren, in als "ein einziges" Skript laufen lassen:
Dazu habe ich ein Startskript, bei welchem der Nutzer mit einer Nummer sagen kann, welches Skript er jetzt ausführen möchte. z.B. gibt es auch ein Settings-Skript, bei dem die Pfade usw. in eine .txt gespeichert werden, damit man sie nicht jedes mal neu eingeben muss. Die Ordnerstruktur zu den Einstellungen mit den Pfaden sieht wie folgt aus:

  • Skript\settings: paths.bat und settings.bat; \saves;
settings.bat ist dabei der Startscreen für die Einstellungen (ähnlich wie bei dem Start des Skriptes mit Nummern zur Auswahl)
paths.bat macht die Abfrage für den Pfad
\saves speichert dort alle .txt-Dateien für die Einstellungen ab

Das Start-Skript ist im Ordner \Skript.

Ich möchte jetzt das Skript vom \Skript starten, von dort aus in die Einstellungen gelangen, die paths.bat ausführen, komme anschließend wieder auf die settings.bat und von dort aus möchte ich mit der richtigen Nummer wieder auf das Skript von \Skript (und evtl. später nochmals die Einstellungen aufrufen und wieder zurück).

Ich habe bemerkt, dass es nicht so will, wie ich gerne hätte^^
Wenn ich z.B. direkt die settings.bat starte, muss ich den Code ändern, dass es checkt, in welches Verzeichnis es zu wechseln hat, wenn ich vom settings.bat ins \Skript gelangen möchte. Starte ich dann vom \Skript, muss ich den Code wieder ändern, damit das Skript es rafft. Gibt es da eine Möglichkeit, wie bspw. bei PHP include(__DIR__ . "\Pfad\zur\Datei")?

Und noch ein Problem, wo ich gerade dabei bin:
Ich habe gestern gelesen, dass man Programme mit dem Befehl 'start' startet. Ich habe also start "" "settings\settings.bat" geschrieben, um das Skript zu starten, aber dabei öffnet sich das Skript und anschließend noch eine leere Konsole. Wenn ich das 'start' weglasse und nur \settings\settings.bat schreibe, dann startet das Skript, ohne eine weitere leere Konsole zu öffnen.

Warum öffnet es eine zweite Konsole?

Vielen Dank,
Dissi-xD

Content-ID: 3196850284

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

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

Crusher79
Crusher79 28.06.2022 um 08:51:24 Uhr
Goto Top
Hallo,

wie wäre es mit Powershell? Da kann man auch Module schreiben und einbinden.

Wäre es nicht sinvoller?

"start" hat Parameter. Einer verhindert das Öffnen eines neuen Fenster. Code hin und her auszuführe - da gibt es schönere Methoden. Powershell beherrscht auch das Einbinden von DLLs und Modulen. Das wäre deutlich einfacher.....
Dissi-xD
Dissi-xD 28.06.2022 aktualisiert um 10:38:51 Uhr
Goto Top
Mit Powershell habe ich noch nie gearbeitet, ich habe nur etwas Batch in der Schule gelernt.

Die Parameter habe ich gefunden, aber irgendwie will das immer noch nicht... Ich mache /b und es geht immer noch ein zweites Kommandofenster auf :/

EDIT:
Habe mich gerade etwas informiert und Powershell muss als Administrator gestartet werden, wofür ich keinen Zugang habe. Muss also doch Batch her...
TK1987
Lösung TK1987 28.06.2022 um 12:50:18 Uhr
Goto Top
Moin,

Zitat von @Dissi-xD:
Habe mich gerade etwas informiert und Powershell muss als Administrator gestartet werden
nein, man muss kein Administrator sein, um Powershell nutzen zu können.

Ich gehe mal davon aus, was du gelesen hast, war das setzen der Execution-Policy - in den meisten Anleitungen findet sich nur der Befehl, um diese für alle Benutzer auf dem Computer global zu setzen - das würde natürlich Adminrechte benötigen, da es alle User betrifft.
Man kann diese aber auch nur für den aktuellen Benutzer setzen - das geht ohne Adminrechte:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned -Force

Technisch gesehen ist diese Ausführungsrichtlinie aber eh nur Schall und Rauch. Man kann die Skripte auch mit dem Parameter -ExecutionPolicy Bypass starten. So braucht diese erst gar nicht gesetzt zu sein.

Wenn ich z.B. direkt die settings.bat starte, muss ich den Code ändern, dass es checkt, in welches Verzeichnis es zu wechseln hat, wenn ich vom settings.bat ins \Skript gelangen möchte.
Ein Verzeichnis in einem Skript zu wechseln, macht eigentlich nur als Notlöung. Besser ist es, mit Pfadangaben zu arbeiten.
Der Dateipfad des jeweiligen Skripts, welches gerade läuft, ist immer in der Variable %0 zu finden. Um z.B. nur den Verzeichnispfad des Skripts zu erhalten, kannst du %~dp0 verwenden.

Ich habe gestern gelesen, dass man Programme mit dem Befehl 'start' startet.
Kann man, muss man aber nicht. Du kannst das Skript auch einfach über den Dateipfad starten, oder auch mit cmd /c.

Ich mache /b und es geht immer noch ein zweites Kommandofenster auf :/
Dann machst du irgendetwas falsch. Auch dein vorheriger Versuch ohne /b
aber dabei öffnet sich das Skript und anschließend noch eine leere Konsole.
zeigt, dass da etwas schief läuft. Normalerweise würde sich ohne /b zwar eine 2. Instanz öffnen, in dieser würde aber das entsprechende Skript ausgeführt werden. Wie sieht dein Code aus?

Gruß Thomas
Dissi-xD
Dissi-xD 29.06.2022 um 20:39:01 Uhr
Goto Top
Hi,

habe deinen Kommentar erst jetzt gelesen und in der Zwischenzeit habe ich es alleine gelöst. Trotzdem vielen Dank für deine Mühe face-smile

Ich glaube du hast recht mit der execution pollicy.

Das mit dem Pfad habe ich jetzt aucb herausgefunden: es kommt immer darauf an, wo man das Skript startet. Starte ich z.B. das Skript wleches später als erstes starten soll, dann startet der Pfad immer von dem Verzeichnis, in dem sich das als erstes ausgeführte Skriot befindet. Ich wollte nur unnötige Klickereien ersparen und habe deshalb direkt das Skript gestartet, an welchem ich gerade gebastelt habe. Natürlich stimmt dann der Pfad nicht, weil das Skript in einem anderen Ordner liegt.

Zu guter letzt wurde start mit call ausgewechselt. Klappt jetzt super face-smile