Ich weiß, dass ich bereits eine ähnliche Frage beantwortet habe ( Batch-Datei im Hintergrund ausführen, wenn Windows gestartet wird), aber dieses Mal muss ich einen Batch starten:
- aus einer anderen Charge,
- ohne dass ein Konsolenfenster angezeigt wird,
- Alle Argumente werden an den unsichtbaren Stapel übergeben.
Der erste Stapel wird in einem Konsolenfenster ausgeführt. Ich möchte jedoch nicht, dass der zweite Stapel (der vom ersten asynchron gestartet wird ) auch ein Konsolenfenster anzeigt.
Ich habe ein VBScript-Skript entwickelt, das genau das tut, und ich habe das Skript als Antwort für andere angegeben, auf die sie sich beziehen können. Wenn Sie jedoch andere Ideen / Lösungen haben, können Sie gerne einen Beitrag leisten.
Hinweis: Das Konsolenfenster des Windows-Befehlsprozessors wird von vielen Personen als nicht wirklich korrektes DOS-Fenster bezeichnet.
Vielen Dank für die Antworten. Soweit ich weiß, muss ich ein Skript asynchron aufrufen, um es in einem unsichtbaren Modus auszuführen:
- Von einem zweiten Skript bereits in einem Konsolenfenster
start /b
reicht das aus. - Unter Windows ist meine Lösung weiterhin gültig , ohne ein zweites Fenster auszulösen .
quelle
Antworten:
Benötigen Sie die zweite Batchdatei, um asynchron ausgeführt zu werden? Normalerweise führt eine Batchdatei eine andere synchron mit dem
call
Befehl aus, und die zweite teilt das Fenster des ersten.Sie können verwenden
start /b
second.bat eine zweite Batch - Datei zu starten , einen synchron von Ihrem ersten , dass die Aktien Ihrer ersten eigenen Fenster. Wenn beide Batchdateien gleichzeitig in die Konsole schreiben, überlappt sich die Ausgabe und ist wahrscheinlich nicht zu entziffern. Außerdem möchten Sie einenexit
Befehl am Ende Ihrer zweiten Batch-Datei einfügen oder sich innerhalb einer zweitencmd
Shell befinden, sobald alles erledigt ist.quelle
Hier ist eine mögliche Lösung:
Rufen Sie in Ihrem ersten Skript Ihr zweites Skript mit der folgenden Zeile auf:
Eigentlich rufen Sie ein vbs-Skript auf mit:
%*
)Anschließend ruft invis.vbs Ihr Skript mit der Windows Script Host Run () -Methode auf , die Folgendes umfasst :
Hier ist invis.vbs:
quelle
Konvertieren Sie die Batch-Datei in eine Exe. Probieren Sie Bat To Exe Converter oder Online Bat To Exe Converter aus und wählen Sie die Option, um es als Geisteranwendung auszuführen, dh ohne Fenster.
quelle
Ich denke, dies ist die einfachste und kürzeste Lösung, um eine Batch-Datei auszuführen, ohne das DOS-Fenster zu öffnen. Es kann sehr ablenkend sein, wenn Sie eine Reihe von Befehlen planen möchten, die regelmäßig ausgeführt werden sollen. Daher wird das DOS-Fenster immer wieder angezeigt. Hier ist Ihre Lösung . Verwenden Sie ein VBS-Skript, um die Batch-Datei aufzurufen ...
Kopieren Sie die obigen Zeilen in einen Editor und speichern Sie die Datei mit der Erweiterung .VBS. Bearbeiten Sie den Namen und den Pfad der .BAT-Datei entsprechend.
quelle
Set WshShell = Nothing
hat gut funktioniert und Sie können einen noch kleineren Weg haben, dies zu tun.Hier ist meine Sammlung von Möglichkeiten, um dies zu erreichen - und noch mehr -, wo es möglich war, dass ich versucht habe, auch die PID des gestarteten Prozesses zurückzugeben (alle verknüpften Skripte können heruntergeladen und unter einem beliebigen Namen gespeichert werden, den Sie für zweckmäßig halten):
1) Der IEXPRESS Lösung kann auch auf alten Win 95/98-Maschinen verwendet werden. Iexpress ist ein wirklich altes Tool, das immer noch mit Windows gepackt ist - da Argumente nur den Befehl und seine Argumente akzeptieren.
Anwendungsbeispiel:
2) SCHTASKS - wieder nur zwei Argumente - den Befehl und die Argumente. Überprüft auch, ob es mit erhöhten Berechtigungen gestartet wurde und erhält nach Möglichkeit die PID des Prozesses mit WEVTUTIL (verfügbar ab Vista und höher, damit die neuere Version von Windows die erhält PID) Befehl.
Anwendungsbeispiel:
3) 'WScript.Shell' - Das Skript ist ein vollständiger Wrapper von 'WScript.Shell' und jede mögliche Option kann über die Befehlszeilenoptionen festgelegt werden. Es ist ein jscript / Batch-Hybrid und kann als Fledermaus aufgerufen werden.
Anwendungsbeispiel (für weitere Informationen drucken Sie die Hilfe mit '-h'):
4) 'Win32_ProcessStartup' - wieder vollständiger Wrapper und alle Optionen sind über die Befehlszeilenargumente zugänglich. Diesmal ist es WSF / Batch-Hybrid mit einigen Jscript- und einigen VBScript-Codeteilen - aber es gibt die PID des gestarteten Prozesses zurück nicht ausgeblendet Einige Optionen wie X / Y-Koordinaten können verwendet werden (gilt nicht für jede ausführbare Datei - aber zum Beispiel akzeptiert cmd.exe Koordinaten).
Anwendungsbeispiel (für weitere Informationen drucken Sie die Hilfe mit '-h'):
5) Die.NET-Lösung . Die meisten Optionen der ProcessStartInfo-Optionen werden verwendet (aber am Ende war ich zu müde, um alles einzuschließen):
Anwendungsbeispiel (für weitere Informationen drucken Sie die Hilfe mit '-h'):
quelle
In der anderen Frage schlug ich autoexnt vor . Das ist auch in dieser Situation möglich. Stellen Sie den Dienst einfach so ein, dass er manuell ausgeführt wird (dh beim Start nicht automatisch). Wenn Sie Ihren Stapel ausführen möchten, ändern Sie die Datei autoexnt.bat, um die gewünschte Stapeldatei aufzurufen, und starten Sie den Dienst autoexnt.
Die Batchdatei zum Starten kann folgendermaßen aussehen (ungetestet):
Beachten Sie, dass auf diese Weise gestartete Batchdateien als Systembenutzer ausgeführt werden. Dies bedeutet, dass Sie nicht automatisch auf Netzwerkfreigaben zugreifen können. Sie können jedoch die Nettonutzung verwenden , um eine Verbindung zu einem Remote-Server herzustellen.
Sie müssen das Windows 2003 Resource Kit herunterladen , um es zu erhalten. Das Resource Kit kann auch auf anderen Windows-Versionen wie Windows XP installiert werden.
quelle
Führen Sie es unter einem anderen Benutzernamen aus, verwenden Sie "runas" oder planen Sie es unter einem anderen Benutzer in Windows Scheduled Tasks.
quelle
Sie können Ihre .bat-Datei über eine .vbs-Datei
ausführen. Kopieren Sie den folgenden Code in Ihre .vbs-Datei:
quelle
Sie können auch verwenden
PS: Leider hängt der minimierte Fensterstatus vom auszuführenden Befehl ab. VG funktioniert nicht
quelle