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.

Author: StarPinkER, 2013-03-04

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 auch dir|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%
 90
Author: dbenham,
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
 22
Author: William Bettridge-Radford,
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
 18
Author: Harley Young,
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.

 10
Author: stephan,
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.

 9
Author: ,
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 19:16:05

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.

 3
Author: Hayz,
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.

 1
Author: VitalyB,
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):                       
 0
Author: JL Peyret,
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