Wie setze ich einen Alias in der Windows-Befehlszeile?
Ich habe früher an Bash gearbeitet und viel von Alias profitiert. Gibt es einen gleichwertigen Weg in der Windows-Befehlszeile?
Ich möchte keine Linux-Umgebung simulieren, daher ist cygwin keine Wahl. Ich brauche nur eine Verknüpfung für einen sehr langen Befehl wie cd a_very_long_path
.
8 answers
Als Christ.K sagte in seinem Kommentar, der Befehl DOSKEY kann verwendet werden, um Makros zu definieren, die analog zu Aliasen sind.
doskey macroName=macroDefinition
Makroparameter werden in der Definition über $
vorangestellte Positionen referenziert: $1
bis $9
und $*
für alle.
Weitere Informationen finden Sie in der Dokumentation doskey technet oder geben Sie doskey /?
oder help doskey
in die Befehlszeile ein.
Aber es gibt ernsthafte Einschränkungen mit DOSKEY Makros:
- Nur die Makros arbeiten Sie an der interaktiven Befehlszeile - sie funktionieren nicht in einem Batch-Skript.
- Sie können nicht auf beiden Seiten einer Pipe verwendet werden: Sowohl
someMacro|findstr '^'
als auchdir|someMacro
schlagen fehl. - Sie können nicht innerhalb eines FOR /F-Befehls verwendet werden:
for /f %A in ('someMacro') do ...
schlägt fehl
Die Einschränkungen sind so gravierend, dass ich selten DOSKEY-Makros verwende.
Offensichtlich können Sie Batch-Skripte anstelle von Makros erstellen und sicherstellen, dass sich die Skriptspeicherorte in Ihrem PFAD befinden. Aber dann müssen Sie jedem Skript einen ANRUF voranstellen, wenn Sie möchten Sie das Skript in einem anderen Skript verwenden.
Sie können einfache Variable "Makros" für lange und oft verwendete Befehle erstellen, aber die Syntax ist etwas umständlich, 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%
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-05-01 18:57:26
Sie können ein Batch-Skript erstellen und in Ihrem Pfad speichern.
Unter Linux würden Sie ein Skript erstellen und es dem Ordner ~/bin
unter Windows können Sie dasselbe tun.
Fügen Sie %USERPROFILE%\bin
zu Ihrer Umgebungsvariablen PATH
hinzu. Dann speichern Sie Ihre Skripte dort.
quickcd.cmd
@echo off
cd /d a_very_long_path
Jetzt können Sie quickcd
in der Befehlszeile eingeben.
Es kann auch innerhalb eines Skripts mit der Funktion call
aufgerufen werden
call quickcd
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-03-23 18:30:21
subst
Wenn Sie wirklich versuchen zu bekommen, um so etwas wie diese:
C:> cd \users\myLoginID\documents\clients\MTV\strategy\roadmap\deliverable\final
Sie können den Befehl subst
verwenden, um diesen langen Pfad einem separaten Laufwerksbuchstaben zuzuordnen
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 die Befehlszeile eingeben.
Der Vorteil gegenüber doskey
ist, dass es in allen Batch-Programmen funktioniert und in jedem Dateidialogfeld in Windows angezeigt wird.
Wenn Sie nicht möchten, dass die mapping-jede weitere:
subst m: /D
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-03-07 15:53:03
Sie könnten den gleichen Trick verwenden, den Windows verwendet: legen Sie eine Umgebungsvariable (oder einfach nur eine variable in einem batch-Kontext) zum Beispiel gibt es eine Umgebungsvariable %windir% (und einige andere) So können Sie ein
cd C:\Windows\
Oder
cd %windir%
Was dasselbe tut. Also alles, was Sie tun müssen, ist:
set "mydir=C:\very\long\path\to\my\data\"
Danach kannst du tun (von wo auch immer du bist):
dir %mydir%
Oder
cd %mydir%
Oder was immer du willst.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-03-11 10:14:50
Im Gegensatz zu Linux können Aliase in Windows Argumente annehmen und Parameter erhalten, um diese Argumente in ihrer Definition zuzuweisen.
Der interne integrierte Befehl ist doskey, was bedeutet, dass es sich nicht um eine externe ausführbare Datei in %SystemRoot%\System32
handelt, sondern um eine Funktion von cmd.exe
, die sich selbst befindet in %SystemRoot%
oder %Windir%
Beide zeigen standardmäßig auf den Ordner C:\Windows
.
Doskey definiert unter anderem Aliase. In der Windows-Terminologie wird Aliase als Makros bezeichnet. Setzen ein Alias, den Sie verwenden
doskey alias=command $1 $2 ... $9 or $* (to catch them all)
Hier zeigt $1
auf das erste Argument und $*
auf alle Argumente.
Ich würde immer $*
und double quote $1
wenn es nur ein Argument gibt, um Leerzeichen wegzulassen, die als Sonderzeichen behandelt werden, nämlich als Trennzeichen (für Befehle).
Darüber hinaus können Sie Ihre Aliase Makros in einer separaten Datei definieren, z. B. LinuxAliases.macro
und dann mit
doskey /macrofile=LinuxAliases.macro
Es werden alle in der Datei definierten Aliase geladen für die aktuelle Sitzung nur, was bedeutet, wenn Sie exit
aus cmd.exe
Prozess (auch bekannt als die Shell und Eingabeaufforderung), sie sind weg.
Um permanente Aliase zu haben, können Sie den vollständigen Befehl irgendwo in einen Regedit-Schlüssel namens AutoRun oder AutoCommand oder ähnliches eingeben, woran ich mich jetzt neben der internen Syntax der Makrodatei nicht erinnern kann :P
Hier sind die offiziellen und sogar besser dokumentationen für die Befehl.
Sie können doskey verwenden.exe, hier ein Beispiel:
doskey qcd=cd [pathname]
Und wenn Sie nun qcd
eingeben, wird zu diesem Pfad hinzugefügt.
Hier ist eine Hilfe mit doskey Makros:
doskey [macroname]=[command]
, Das ist die einfachste form, hier ist ein Beispiel:
doskey word=echo This is a really, really long sentence.
Und wenn Sie word
eingeben, lautet die Ausgabe:
Dies ist ein wirklich, wirklich langer Satz.
Sie können $1-$9 für Parameter verwenden, hier ist ein Beispiel:
doskey npd=notepad $1
, Und wenn Sie geben npd
es öffnet sich notepad aber wenn wir npd test.txt
eingeben, öffnet es test.txt in Editor.
Sie können $* für alle Parameter verwenden, hier ist ein weiteres Beispiel:
doskey prt=echo $*
Und wenn Sie prt This is short.
eingeben, lautet die Ausgabe:
Dies ist kurz.
Sie können $T für mehrere Befehle verwenden, hier ist ein Beispiel:
doskey newline=echo $1 $T echo $2
Und wenn Sie newline Hello and
eingeben, lautet die Ausgabe:
Hallo
Und
I hoffe, Sie verstehen.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-06-12 13:48:39
Ich habe einen solchen "Alias" speziell zum Ändern des Verzeichnisses erstellt. Grundsätzlich habe ich eine Datei mit dem Namen fav.bat
erstellt und in einen Ordner in PATH (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 einem beliebigen vordefinierten Ordner springen. Ich schrieb einen vollständigen Artikel über diese Technik hier.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-09-09 18:42:36
Angenommen, Sie bleiben auf demselben Laufwerk, dh kein D:
, dann wird cd D:\somedir\
benötigt.
In meinem Fall enthält C: Systemdateien, aber alle Arbeiten laufen auf D:
2 Teile. legen Sie zuerst 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 nun eine andere Befehlsdatei, um sich basierend auf den Umgebungsvariablen, die Sie gerade haben, zu bewegen setzen.
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 Beispielgebrauch:
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 selbst soll mir die Liste der mit Lesezeichen versehenen Verzeichnisse zeigen. Es funktioniert, aber nicht sicher, warum ich diese Meldung "Unerwartete CD" 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>
Regular .cmd Chargen
Abgesehen von der Verzeichnisnavigation können Sie ein foo erstellen.cmd befindet sich irgendwo auf Ihrem PFAD und kann als Alias fungieren. Denken Sie daran, dass CMD-Dateien im Gegensatz zu Linux/OSX-Shells die Umgebung beeinflussen können variablen und die Sitzung, ohne dass Quelle sie.
Ich habe ein cdbin.cmd um mich zu navigieren, zum Beispiel:
d:
cd \home\bin
Und dies ist ein pseudo-grep grep.cmd
findstr -n %1 %2
In Aktion (was auch immer sortieren /+2 /+10 mittel)
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):
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-11-16 18:57:58