Wie lege ich einen Alias ​​in der Windows-Befehlszeile fest?

66

Früher habe ich an Bash gearbeitet und viel von Alias ​​profitiert. Gibt es eine äquivalente Möglichkeit in der Windows-Befehlszeile?

Ich möchte keine Linux-Umgebung simulieren, daher ist Cygwin keine Wahl. Ich brauche nur eine Abkürzung für einen sehr langen Befehl, wie cd a_very_long_path.

StarPinkER
quelle
5
Sie würden verwenden doskey(lassen Sie sich nicht durch den Namen täuschen, es ist nicht der alte MS DOS-Doskey). Verwenden Sie doskey /?für weitere Informationen. Abgesehen davon ist diese Frage leider hier nicht zum Thema.
Christian.K
Mögliches Duplikat von Gibt es einen Befehl zum Ändern des Pfads vom aktuellen Speicherort zum Standardverzeichnis in der Windows-Eingabeaufforderung? In meiner Antwort erfahren Sie, wie Sie Ihre DOSKey-Makros beim Öffnen der Eingabeaufforderung automatisch laden lassen können.
Karan
Verwandte + eine Möglichkeit permanent zu machen doskey superuser.com/questions/49170/...
laggingreflex

Antworten:

61

Wie Christian.K in seinem Kommentar sagte, kann der DOSKEY-Befehl verwendet werden, um Makros zu definieren, die zu Aliasen analog sind.

doskey macroName=macroDefinition

Makroparameter werden in der Definition über $vorangestellte Positionen referenziert : $1durch $9und $*für alle.

Weitere Informationen finden Sie in der Dokumentation zu doskey technet oder geben Sie doskey /?oder help doskeyin der Befehlszeile ein.

DOSKEY-Makros weisen jedoch schwerwiegende Einschränkungen auf:

  • Die Makros funktionieren nur auf der interaktiven Befehlszeile - sie funktionieren nicht innerhalb eines Batch-Skripts.
  • Sie können nicht auf beiden Seiten eines Rohrs verwendet werden: Beide someMacro|findstr '^'und dir|someMacronicht.
  • Sie können nicht in FOR / F-Befehlen verwendet werden: for /f %A in ('someMacro') do ...schlägt fehl

Die Einschränkungen sind so schwerwiegend, dass ich DOSKEY-Makros selten verwende.

Natürlich können Sie Batch-Skripte anstelle von Makros erstellen und sicherstellen, dass sich die Skriptpositionen in Ihrem PATH befinden. Dann müssen Sie jedoch jedem Skript CALL voranstellen, wenn Sie das Skript in einem anderen Skript verwenden möchten.

Sie können einfache "Makros" für lange und häufig verwendete Befehle erstellen, aber die Syntax ist etwas umständlich einzugeben, da Sie das "Makro" erweitern müssen, wenn Sie es verwenden möchten.

Definition:

set "cdMe=cd a_very_long_path"

Verwendung (über die Befehlszeile oder das Skript)

%cdMe%
dbenham
quelle
Danke, gibt es dann eine Möglichkeit, innerhalb eines Batch-Skripts zu arbeiten?
StarPinkER
@ JermaineXu - Auf keinen Fall mit DOSKEY-Makros. Siehe meine aktualisierte Antwort für grobe Alternativen.
Dbenham
2
Der Vorteil der zweiten Lösung ist, dass die Rohrleitungen funktionieren. Die erste Lösung mit doskey funktioniert nicht, wenn Sie das Makro in Piping verwenden möchten.
CEO bei Apartico
Wie kann ich diese Makros für die Win + R-Box sichtbar machen (Dialogfeld "Ausführen")
ZEE
@ZEE - Das kannst du nicht. DOSKEY-Makros müssen physisch in ein Konsolenfenster eingegeben werden, in dem cmd.exe ausgeführt wird.
Dbenham
15

Sie können ein Stapelskript erstellen und in Ihrem Pfad speichern.

Unter Linux würden Sie ein Skript erstellen und es dem Ordner hinzufügen, ~/binunter Windows können Sie dasselbe tun.

Fügen Sie %USERPROFILE%\binIhrer PATHUmgebungsvariable hinzu. Speichern Sie dann Ihre Skripte dort.

quickcd.cmd

@echo off
cd /d a_very_long_path

Jetzt können Sie quickcdin der Befehlszeile eingeben.

Es kann auch innerhalb eines Skripts mit der callFunktion aufgerufen werden

call quickcd
William Bettridge-Radford
quelle
Dies funktioniert nicht - das Festlegen des Verzeichnisses in einer Batchdatei wirkt sich nur auf die Batchdatei aus. Der Pfad wird zurückgesetzt, wenn die Batchdatei beendet wird.
Schatten
1
Es funktioniert für mich. Microsoft Windows [Version 10.0.17134.648]
William Bettridge-Radford
Das ist wirklich komisch. Wenn Sie also das obige Beispiel kopieren und einfügen (indem Sie das Verzeichnis in ein vorhandenes ändern), funktioniert es für Sie?
Schatten
Befindet sich Ihr Ordner auf einem anderen Laufwerk? Möglicherweise musst du die /dFlagge hinzufügen zuCD
William Bettridge-Radford
13

subst

Wenn Sie wirklich versuchen, so etwas zu umgehen:

C:> cd \users\myLoginID\documents\clients\MTV\strategy\roadmap\deliverable\final

Mit dem substBefehl können Sie diesen langen Pfad einem separaten Laufwerksbuchstaben zuordnen

subst m: c:\users\myLoginID\documents\clients\MTV\strategy\roadmap\deliverable\final

Wenn Sie dann in diesen Ordner springen möchten, können Sie einfach m:in der Befehlszeile eingeben.

Der Vorteil gegenüber doskeyist, dass es in allen Stapelverarbeitungsprogrammen funktioniert und in jedem Dateidialogfeld unter Windows angezeigt wird.

Wenn Sie das Mapping nicht mehr wollen:

subst m: /D
Harley Young
quelle
3
Ich mag das auch, aber es frisst Laufwerksbuchstaben auf.
ggb667
8

Sie könnten den gleichen Trick verwenden, den Windows verwendet: Setzen Sie eine Umgebungsvariable (oder nur eine Variable in einem Batch-Kontext), zum Beispiel gibt es eine Umgebungsvariable% windir% (und einige andere)

cd C:\Windows\

oder

cd %windir%

was dasselbe tut. Alles, was Sie tun müssen, ist:

set "mydir=C:\very\long\path\to\my\data\"

Danach können Sie (von wo auch immer Sie sind) Folgendes tun:

dir %mydir%

oder

cd %mydir%

oder was auch immer du willst.

stephan
quelle
1
Das ist das Ticket @stephan!
jbchurchill
3

Im Gegensatz zu Linux können in Windows-Aliase Argumente annehmen und Parameter erhalten, denen diese Argumente in ihrer Definition zugewiesen werden.

Der interne integrierte Befehl lautet doskey , dh, es handelt sich nicht um eine externe ausführbare Datei, %SystemRoot%\System32sondern um eine Funktion, cmd.exedie sich selbst %SystemRoot%oder %Windir%beide C:\Windowsstandardmäßig in einem Ordner befinden und auf diesen zeigen.

Doskey definiert unter anderem Aliase. In der Windows-Terminologie werden Aliase als Makros bezeichnet. Zum Festlegen eines von Ihnen verwendeten Alias

doskey alias=command $1 $2 ... $9 or $* (to catch them all) 

Hier $1zeigt auf das erste Argument und $*zeigt auf alle Argumente.

Ich würde immer $*doppelte Anführungszeichen verwenden, $1wenn es nur ein Argument gibt, um Leerzeichen auszulassen, die als Sonderzeichen behandelt werden, nämlich als Trennzeichen (für Befehle).

Darüber hinaus können Sie Ihre definieren Aliase Makros in einer separaten Datei, sagen LinuxAliases.macround dann beziehen sie mit

doskey /macrofile=LinuxAliases.macro

Alle in der Datei definierten Aliase werden nur für die aktuelle Sitzung geladen , dh wenn Sie sich exitaußerhalb des cmd.exeProzesses befinden (auch als Shell und Eingabeaufforderung bezeichnet), sind sie verschwunden.

Um dauerhafte Aliase zu haben, können Sie den vollständigen Befehl irgendwo in einen Regedit-Schlüssel eingeben, der entweder AutoRun oder AutoCommand oder ähnliches heißt, woran ich mich jetzt neben der internen Syntax der Makrodatei nicht erinnern kann: P


Hier sind die offiziellen und noch besseren Dokumentationen für den Befehl.


quelle
1

Ich habe einen solchen "Alias" speziell für das Wechseln des Verzeichnisses erstellt. Grundsätzlich habe ich eine Datei mit dem Namen erstellt fav.batund in einem Ordner in PATH abgelegt (zB C: \ MyBatches):

@setlocal
@echo off
set userChoice=%1
rem The format is:
rem call :condition SHORTCUT FOLDER
call :condition web c:\Git\SecThor\SecWeb\App\
call :condition cloud c:\Git\SecThor\SecCloud\dojo.backend\
call :condition good c:\Users\Vitaly\Dropbox\Projects\goodread-friends\
endlocal
popd
GOTO :eof

:condition
rem We do PUSHD twice since endlocal does popd once :|
if "%userChoice%"=="%1" pushd %2 & pushd %2 & echo pushd %2
if "%userChoice%"=="" echo %1 =^> %2
GOTO :eof

Dann kann ich sehr schnell zu jedem vordefinierten Ordner springen. Ich schrieb einen ganzen Artikel über diese Technik hier .

VitalyB
quelle
0

vorausgesetzt, Sie bleiben auf dem gleichen Laufwerk, dh nicht D:dann cd D:\somedir\benötigt.

In meinem Fall enthält C: Systemdateien, aber die gesamte Arbeit befindet sich auf D:

2 Teile. Legen Sie zunächst einige Arbeitsverzeichnisse mithilfe einer Batchdatei fest.

Sagen wir localprofile.cmd . Sie können mehrere davon haben, führen Sie sie einfach nach Bedarf aus.

set wd1=D:\home\work\fb440.dumper
set wd2=D:\home\work\py\tests

Verwenden Sie jetzt eine andere Befehlsdatei, um sich zu bewegen, basierend auf den Umgebungsvariablen, die Sie gerade festgelegt haben.

wd.cmd

echo off
d:
if %1.==. set | findstr wd
if %1==1 cd %wd1%
if %1==2 cd %wd2%
if %1==3 cd %wd3%
if %1==4 cd %wd4%
if %1==5 cd %wd5%
if %1==6 cd %wd6%

Und ein bisschen wie ein Anwendungsbeispiel:

D:\home\bin>wd 2

D:\home\bin>echo off
D:\home\work\py\tests>wd 1

D:\home\work\py\tests>echo off

wd soll mir die Liste der mit Lesezeichen versehenen Verzeichnisse anzeigen. Es funktioniert, aber nicht sicher, warum ich diese "unerwartete CD" -Nachricht erhalte.

D:\home\work\fb440.dumper>wd

D:\home\work\fb440.dumper>echo off
wd1=D:\home\work\fb440.dumper
wd2=D:\home\work\py\tests
cd was unexpected at this time.

D:\home\work\fb440.dumper> 

Regelmäßige .cmd-Chargen

Abgesehen von der Verzeichnisnavigation können Sie irgendwo in Ihrem PATH eine foo.cmd erstellen, die als Alias ​​fungiert. Denken Sie daran, dass sich Cmd-Dateien im Gegensatz zu Linux / OSX-Shells auf Umgebungsvariablen und die Sitzung auswirken können, ohne dass Sie sie als Quelle angeben müssen.

Ich habe eine cdbin.cmd , um mich zu navigieren, zum Beispiel:

d:
cd \home\bin

Und das ist eine Pseudo-grep grep.cmd

findstr -n %1 %2

in Aktion (egal welche Sorte / + 2 / + 10 bedeutet)

D:\home\work\fb440.dumper>grep class *.py | sort /+2 /+10

dumper2.py:18:class PrettySafeLoader(yaml.SafeLoader):            
dumper2.py:27:class Comparator(object):                           
dumper2.py:3:class module_settings:                               
linker2.py:5:class module_settings:                               
dumper2.py:65:class DataCompProcessor(object):                    
dumper2.py:69:class DataCompTextRenderer(DataCompProcessor):      
dumper2.py:76:class DataComparator(object):                       
JL Peyret
quelle
0

Sie können doskey.exe verwenden , hier ein Beispiel:

doskey qcd=cd [pathname]

Und jetzt, wenn Sie qcddann tippen , wird es auf diesen Pfad cd .

Hier ist einige Hilfe mit Doskey- Makros:

doskey [macroname]=[command]

Das ist die einfachste Form, hier ein Beispiel:

doskey word=echo This is a really, really long sentence.

und wenn Sie worddie Ausgabe eingeben, ist:

Dies ist ein wirklich sehr langer Satz.

Sie können $ 1- $ 9 für Parameter verwenden, hier ein Beispiel:

doskey npd=notepad $1

und wenn Sie eingeben npdwird es öffnen Notizblock aber wenn wir geben npd test.txtwird es öffnen test.txt in Notizblock .

Sie können $ * für alle Parameter verwenden, hier ist ein weiteres Beispiel:

doskey prt=echo $*

und wenn Sie prt This is short.dann eingeben, wird die Ausgabe sein:

Das ist kurz.

Sie können $ T für mehrere Befehle verwenden. Hier ein Beispiel:

doskey newline=echo $1 $T echo $2

und wenn Sie newline Hello anddann eingeben, wird die Ausgabe sein:

Hallo

und

Ich hoffe, Sie verstehen.

Hayz
quelle