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:
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
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;
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3196850284
Url: https://administrator.de/contentid/3196850284
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
4 Kommentare
Neuester Kommentar
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.....
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.....
Moin,
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:
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.
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.
Gruß Thomas
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.Habe mich gerade etwas informiert und Powershell muss als Administrator gestartet werden
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 /baber 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