Befehle automatisch ausführen, wenn eine Eingabeaufforderung geöffnet wird


21

Ich suche nach einer Möglichkeit, einige Konsolenbefehle automatisch auszuführen, wenn eine Eingabeaufforderung in Windows geöffnet wird, insbesondere, um einige Befehls-Aliase festzulegen.

Wenn zum Beispiel eine Eingabeaufforderung geöffnet wird, möchte ich, dass ein Befehl wie der folgende automatisch ausgeführt wird, damit ich ihn lsanstelle von verwenden kann dir.

doskey ls=dir

Wie geht das?



3
Windows XP hat kein DOS.
user1686

@KContreau, interessant. Es wäre also der Grund, dass meine Batches nach einem "start / separate" -Befehl keine Doskey-Subsitutionen speichern, sondern nur mit "cmd / k" oder "cmd / c" ...
kokbira

Müssen wir den Fragentitel nach der Ausgabe von "Clarification" ändern oder nicht?
Kokbira

1
@ KCotreau: Technisch gesehen ist es Teil des Win32-Konsolen-Subsystems, nicht spezifisch für cmd.exe.
user1686

Antworten:


9

Wenn Sie möchten, dass es beim Booten geladen wird, anstatt sich anzumelden, und wenn Sie XP Pro haben (XP Home enthält nicht gpedit.msc), gehen Sie wie folgt vor:

Start> Ausführen> gpedit.msc

und drücke Enter. Führen Sie dann gpupdate / force über eine Befehlszeile aus.

Gehe zu

Computerkonfiguration> Windows-Einstellungen> Skripts> Start

und fügen Sie den Speicherort zum Skript hinzu.

Sie können dies auch für eine Benutzeranmeldung unter tun

Benutzerkonfiguration> Windows-Einstellungen> Skripts> Start

Wenn Sie über XP Home verfügen, können Sie die Skripte in eines der folgenden Verzeichnisse kopieren:

C: \ Windows \ System32 \ GroupPolicy \ Machine \ Scripts \ Startup

um sie beim Booten zu laden, oder:

C: \ Windows \ System32 \ GroupPolicy \ User \ Scripts \ Logon

zum Laden für einen Benutzer bei der Anmeldung. Der GroupPolicy-Ordner ist ausgeblendet.


1
Ich würde diese Methode dem Ablegen im Startordner vorziehen. Macht es dauerhafter.
Joe Taylor

1
@ Joe Taylor Vielen Dank. Um ehrlich zu sein, verwende ich den Startordner nur zum Starten von Outlook. Dies ist aus Sicht der Systemadministration eine Standardmethode.
KCotreau,

@KContreau, deine Lösung ist sehr nützlich, aber nicht für diesen Fall. Ich habe getestet, aber es funktioniert nicht für Doskey-Ersetzungsbefehl ...
Kokbira

@kokbira Die ursprüngliche Frage lautete einfach "Wie führe ich ein Skript beim Start in XP aus?", und ich glaube, ich habe sie richtig beantwortet. Er editierte und fügte den Teil "zum Beispiel und doskey ls = dir" danach hinzu.
KCotreau

1
@KContreau, du hast recht, das Problem ist, dass der Titel dieser Frage nicht korrekt ist. In "Clarification" sagte er, dass er "einige DOS-Befehle ausführen möchte, wenn ich eine DOS-Eingabeaufforderung starte, hauptsächlich, um einige Aliase zu setzen ". Wenn Sie beim Start von Windows einige Befehle ausführen möchten, ist Ihre Lösung in Ordnung, wenn Sie Aliase ausführen möchten, ist dies nicht der Fall.
Kokbira

47

Befehls-Aliase sind spezifisch für das Konsolenfenster, in dem Sie sie konfigurieren. Daher funktioniert ein Startskript nicht. Du kannst es so machen:

  1. Erstellen Sie eine Batch-Datei ( .cmd) mit Ihren Doskey- Befehlen und fügen Sie sie irgendwo in die Anwendungsdaten ein.

  2. Konfigurieren Sie es so, dass es beim Öffnen von cmd automatisch gestartet wird . Die Einstellung befindet sich in der Registrierung:

    • Schlüssel: HKCU\SOFTWARE\Microsoft\Command Processor
    • Wert: AutoRun
    • Typ: REG_EXPAND_SZ
    • Daten: "%AppData%\aliases.cmd"

1
Dies war eine großartige Lösung für ein virtuelles Win2K-Betriebssystem, bei dem die Eingabeaufforderung immer die Compilerpfade laden sollte. Einziger Unterschied war die Verwendung von REG_SZ anstelle von REG_EXPAND_SZ
James

Das ist eine schöne Lösung. Gibt es eine Möglichkeit, die anfängliche Ausgabe zu unterdrücken?
Nburr

1
@Nickolas: Nur die Befehle wie immer an NUL umleiten?
user1686

Dies funktioniert wunderbar, JEDOCH, es kann den Windows-Ressourcen-Compiler (rc.exe) stören und Fehler wie "Das System kann den angegebenen Pfad nicht finden" verursachen. Siehe Visual Studio Shell Isoliertes Projekt wird nicht kompiliert .
User5910

Ich habe dies behoben, indem ich zuerst die Prüfung auf das Vorhandensein der Datei festgelegt habe:if exist "%AppData%\aliases.cmd" "%AppData%\aliases.cmd"
User5910

4

Verschiedene Befehlsinterpreter behandeln Befehlsaliase auf unterschiedliche Weise.

Microsofts CMD stützt sich auf das Win32-Konsolensubsystem, um seinen Befehls-Aliasing-Mechanismus bereitzustellen. Der doskeyBefehl interagiert tatsächlich mit der Konsole des Prozesses, und es ist die Konsole selbst, die Aliase enthält. Somit sind Aliase pro Konsole und vorübergehend.

TCC / LE von JP Software verarbeitet Aliase selbst. Mit dem aliasBefehl können Sie Aliase anzeigen und bearbeiten, die entweder "lokal" oder "global" sind. Aliase sind noch vorübergehend, aber entweder für einen Befehlsinterpreterprozess privat oder für alle Befehlsinterpreterprozesse (über alle Konsolen hinweg) gemeinsam.

Shells wie die Korn-Shell im SFUA-Dienstprogramm-Toolkit - deren Tools im Subsystem für UNIX-basierte Anwendungen ausgeführt werden , das im Lieferumfang von Windows 7 Ultimate Edition und Windows Server 2008 R2 enthalten ist (für Windows XP kann es heruntergeladen und installiert werden) Services für UNIX Version 3.5 .) - und die Bourne Again-Shell von cygwin behandeln Aliase ebenfalls selbst. Aliase sind vorübergehend und werden per Befehlsinterpreter verarbeitet.

Das automatische Laden eines Standard-Anfangssatzes von Aliasen hängt auch vom Befehlsinterpreter ab.

In allen Fällen fügt man Befehle ein, um die Aliase in einem Skript festzulegen.

grawityhat bereits einen der beiden Registrierungsschlüssel angegeben, mit denen das CMD von Microsoft beim Start einen Befehl ausführt . Leider ist dies ein Interpreter-Prozess pro Befehl, obwohl die Aliase selbst pro Konsole gespeichert sind . Starten Sie einen sekundären Befehlsinterpreter vom ersten, und alle manuellen Änderungen an den Standardaliasnamen werden zurückgesetzt. Eine Alternative, die die Initialisierung mindestens einmal pro Konsole durchführt, ist das Hinzufügen der /KOption und des Namens eines Befehlsskripts, doskeydas in der Verknüpfung, mit der der Befehlsinterpreter gestartet wird, zum Befehlsende aufruft .

TCC / LE von JP Software führt das TCSTARTSkript beim Start automatisch aus . Dies ist wiederum ein pro-Befehl-Interpreter-Prozess. Die "lokalen" Aliasnamen von TCC gelten jedoch auch für den Prozess des Befehlsinterpreters. Daher ist dies der richtige Ort, um Aliasnamen zu initialisieren, wenn lokale Aliasnamen verwendet werden. Erstellen Sie für globale Aliase einfach eine Verknüpfung in Ihrem StartupOrdner, die Aliase aus einer Datei lädt (mit alias /r), und führen Sie dann den shraliasBefehl aus, sodass sie bestehen bleiben, nachdem diese Verknüpfung ausgeführt wurde.

Tun Sie für die Bourne Again- und Korn-Shells einfach das Gleiche wie für diese Shells auf jeder anderen Plattform. Verwenden Sie den aliasBefehl in den Skripten $HOME/.profileund $HOME/.bashrcfür die Bourne Again-Shell. Verwenden Sie den aliasBefehl in $HOME/.profile, ENV und den $HOME/.kshrcSkripten für die Korn-Shell.


2

Die Antwort von Gravity hat mir sehr gut gefallen.

Ich habe ein shell-aliases.cmd-Skript in meinem Dokumentenordner erstellt (irgendwo finde ich es später).

Erstellen Sie dann den erweiterbaren Zeichenfolgenwert "AutoRun" im Registrierungsschlüssel:

'HKEY_CURRENT_USER \ Software \ Microsoft \ Command Processor'

Stellen Sie den Wert auf den vollständigen Pfad zur Aliase-Datei ein (Mine befand sich unter 'C: \ Users \ Lee \ Documents \ shell-aliases.cmd').

Nachdem ich die Eingabeaufforderung neu geladen hatte, funktionierten meine Doskey-Aliase. Außerdem ist meine Aliase-Datei leicht zugänglich und kann bearbeitet werden, wenn ich mir überlege, weitere hinzuzufügen.


0

Es gibt verschiedene Speicherorte, aber das Startmenü> Startordner ist wahrscheinlich der einfachste.

Führen Sie 'msconfig' aus und sehen Sie, welche Programme gestartet werden und warum. Sie können Ihr Programm einfach zu einer dieser Listen hinzufügen (z. B. in der Registrierung).


0

Das Problem hierbei ist, dass diese Ersetzungen nur in der geöffneten CMD-Eingabeaufforderung verfügbar sind, wenn Sie dies beim Start tun. Wenn es geschlossen wird, gehen alle diese Ersetzungen verloren und müssen für jede geöffnete Eingabeaufforderung erneut ausgeführt werden.

Also, einige alternative Möglichkeiten (Sie können sie kombinieren):

I. Erstellen Sie einen Stapel und eine Verknüpfung:

  1. Erstellen Sie mit diesen Makros einen Stapel und speichern Sie ihn an einem bekannten Ort (z. B. c: \ apps \ mycmd.bat).
  2. Erstellen Sie eine Verknüpfung auf dem Desktop (oder wo Sie möchten), indem Sie "cmd / k" vor den Pfad setzen (z. B. "cmd /kc:\apps\mycmd.bat").
  3. So werden alle Ihre Befehle jedes Mal ausgeführt, wenn Sie diese Verknüpfung öffnen.

II. Erstellen Sie einen Stapel und einen Eintrag in der Umgebungsvariablen PATH:

  1. Erstellen Sie mit diesen Makros einen Stapel und speichern Sie ihn an einem bekannten Ort (z. B. c: \ apps \ mycmd.bat).
  2. Gehen Sie zu Systemsteuerung> System> Erweiterte Konfigurationen> Erweitert> Umgebungsvariablen.
  3. Suchen Sie in Benutzer- oder Systemeinträgen nach einer Variablen mit dem Namen PATH. Doppelklicken Sie darauf und fügen Sie am Ende ";" und den Pfad zu Ihrer BAT (zB "c: \ apps \" => "previous_string; c: \ apps \"), dann Ok und Ok.
  4. Wenn Sie also ein Cmd (oder eine BAT-Datei) verwenden, geben Sie einfach den Namen eines BAT in den erstellten Pfad ein (z. B. "c: \ apps"), um Ihre Befehle auszuführen (z. B. geben Sie "myapps" ein, um diese Ersetzungsbefehle auszuführen).

1
Ich habe "start / separate" versucht, aber es speichert nur die Umgebungsvariable (nicht die Ersetzungen des Befehls doskey) ... Der Befehl "set" ist auch nur für die geöffnete Eingabeaufforderung gültig, aber wir können "setx" verwenden, um ihn im System zu speichern oder Benutzerumgebungsvariablen "für immer". Ich weiß nicht, ob es eine Möglichkeit gibt, Doskey-Ersetzungen "für immer" im System oder für jeden Windows-Start zu speichern. Ich benutze meine Wege lieber ...
Kokbira
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.