2013-03-04 07:28:04 +0000 2013-03-04 07:28:04 +0000
71
71

Wie setzt man einen Alias in der Windows Kommandozeile?

Ich habe früher mit der Bash gearbeitet und profitiere sehr von Alias. Gibt es eine gleichwertige Möglichkeit in der Windows-Kommandozeile?

Ich möchte keine Linux-Umgebung simulieren, also kommt cygwin nicht in Frage. Ich brauche nur eine Abkürzung für einen sehr langen Befehl, wie cd a_very_long_path.

Antworten (7)

68
68
68
2013-03-04 12:03:15 +0000

Wie Christian.K in seinem Kommentar sagte, kann der DOSKEY-Befehl 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 doskey technet documentation , oder geben Sie doskey /? oder help doskey auf der Kommandozeile ein.

Aber es gibt ernsthafte Einschränkungen bei DOSKEY-Makros:

  • Die Makros funktionieren nur auf der interaktiven Befehlszeile - sie funktionieren nicht innerhalb eines Batch-Skripts.
  • 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 DOSKEY-Makros nur selten verwende.

Natürlich können Sie anstelle von Makros Batch-Skripte erstellen und sicherstellen, dass die Speicherorte der Skripte in Ihrem PATH liegen. Aber dann müssen Sie jedem Skript ein CALL voranstellen, wenn Sie das Skript innerhalb eines anderen Skripts verwenden wollen.

Sie könnten einfache Variablen-“Makros” für lange und oft verwendete Befehle erstellen, aber die Syntax ist etwas umständlich zu schreiben, da Sie das “Makro” erweitern müssen, wenn Sie es verwenden wollen.

Definition:

set "cdMe=cd a_very_long_path"

Verwendung (aus der Befehlszeile oder einem Skript)

%cdMe%
16
16
16
2013-03-04 13:01:49 +0000

Sie können ein Batch-Skript erstellen und es in Ihrem Pfad speichern.

Unter Linux erstellen Sie ein Skript und fügen es dem Ordner ~/bin hinzu, unter Windows können Sie dasselbe tun.

Fügen Sie %USERPROFILE%\bin zu Ihrer Umgebungsvariablen PATH hinzu. Speichern Sie dann Ihre Skripte dort ab.

quickcd.cmd

@echo off
cd /d a_very_long_path

Jetzt können Sie quickcd in die Kommandozeile eingeben.

Es kann auch innerhalb eines Skripts mit der Funktion call aufgerufen werden

call quickcd
14
14
14
2014-01-09 06:21:00 +0000

subst

Wenn Sie wirklich versuchen, etwas wie das hier zu umgehen:

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

Sie können den Befehl subst verwenden, um diesen langen Pfad auf einen separaten Laufwerksbuchstaben abzubilden

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

Dann können Sie, wenn Sie in diesen Ordner springen wollen, einfach m: in die Befehlszeile eingeben.

Der Vorteil gegenüber doskey ist, dass es in allen Batch-Programmen funktioniert und in jedem Dateidialogfeld von Windows angezeigt wird.

Wenn Sie das Mapping nicht mehr wollen:

subst m: /D
10
10
10
2013-03-11 10:14:50 +0000

Sie könnten den gleichen Trick verwenden, den Windows verwendet: Setzen Sie eine Umgebungsvariable (oder einfach eine Variable in einem Batch-Kontext), z. B. gibt es eine Umgebungsvariable %windir% (und einige andere), also können Sie ein

cd C:\Windows\

oder

cd %windir%

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

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

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

dir %mydir%

oder

cd %mydir%

oder was immer Sie wollen.

1
1
1
2015-09-09 18:42:36 +0000

Ich habe einen solchen “Alias” speziell für den Verzeichniswechsel erstellt. Im Grunde habe ich eine Datei mit dem Namen fav.bat erstellt und in einen Ordner im PATH (z.B. C:\MyBatches) gelegt:

@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 habe einen ganzen Artikel über diese Technik geschrieben hier .

1
1
1
2019-02-18 12:41:06 +0000

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

doskey qcd=cd [pathname]

Und wenn Sie nun qcd eingeben, wird es cd zu diesem Pfad.

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 tippen, ist die Ausgabe:

Das ist ein sehr, sehr langer Satz.

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

doskey npd=notepad $1

und wenn Sie npd eingeben, wird notepad geöffnet, aber wenn wir npd test.txt eingeben, wird test.txt in notepad geöffnet.

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

doskey prt=echo $*

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

Das 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 tippen, dann wird die Ausgabe sein:

Hallo

und

Ich hoffe, Sie verstehen.

0
0
0
2016-11-16 18:41:42 +0000

vorausgesetzt, Sie bleiben auf demselben Laufwerk, d. h. kein D: dann cd D:\somedirvorausgesetzt, Sie bleiben auf demselben Laufwerk, d. h. keinD:` dann benötigt.

In meinem Fall enthält C: Systemdateien, aber alle Arbeit findet auf D:

2 Teile. zuerst einige Arbeitsverzeichnisse einstellen, mit einer Batch-Datei.

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 weitere Befehlsdatei, um sich zu bewegen, basierend auf den Umgebungsvariablen, die Sie gerade gesetzt 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 kleines 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 selbst soll mir die Liste der mit Lesezeichen versehenen Verzeichnisse anzeigen. Es funktioniert, aber ich bin mir nicht sicher, warum ich diese “unexpected cd”-Meldung 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-Stapel

Abgesehen von der Verzeichnisnavigation können Sie irgendwo auf Ihrem PATH eine foo.cmd anlegen, die ähnlich wie ein Alias funktionieren kann. Denken Sie daran, dass cmd-Dateien im Gegensatz zu Linux/OSX-Shells auf Umgebungsvariablen und die Sitzung einwirken können, ohne dass Sie sie sourcen müssen.

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

d:
cd \home\bin

Und das ist ein Pseudo-Grep grep.cmd

findstr -n %1 %2

in Aktion (was immer sort /+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):