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

Hoe een alias instellen in Windows Command Line?

Ik werkte vroeger met bash en had veel baat bij alias. Is er een gelijkwaardige manier in Windows Command Line?

Ik wil geen Linux omgeving simuleren, dus cygwin is geen keuze. Ik heb alleen een snelkoppeling nodig voor een erg lang commando, zoals cd a_very_long_path.

Antwoorden (7)

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

Zoals Christian.K in zijn commentaar zei, kan het DOSKEY commando gebruikt worden om macro’s te definiëren, die analoog zijn aan aliassen.

doskey macroName=macroDefinition

Macro-parameters worden in de definitie genoemd via $ voorgeplaatste posities: $1 tot en met $9 en $* voor alle.

Zie de doskey technet documentatie , of type doskey /? of help doskey vanaf de commandoregel voor meer informatie.

Maar er zijn serieuze beperkingen met DOSKEY macro’s:

  • De macro’s werken alleen op de interactieve opdrachtregel - ze werken niet binnen een batchscript.
  • Ze kunnen niet aan beide kanten van een pipe worden gebruikt: Zowel someMacro|findstr '^' als dir|someMacro mislukken.
  • Ze kunnen niet binnen een FOR /F-opdracht worden gebruikt: for /f %A in ('someMacro') do ... faalt

De beperkingen zijn zo ernstig dat ik zelden DOSKEY macro’s gebruik.

Je kunt natuurlijk ook batch scripts maken in plaats van macro’s, en ervoor zorgen dat de script locaties in je PATH staan. Maar dan moet je elk script vooraf laten gaan door CALL als je het script binnen een ander script wilt gebruiken.

Je zou eenvoudige variabele “macro’s” kunnen maken voor lange en vaak gebruikte commando’s, maar de syntax is een beetje onhandig om te typen, omdat je de “macro” moet uitbreiden als je hem wilt gebruiken.

Definitie:

set "cdMe=cd a_very_long_path"

Gebruik (vanaf opdrachtregel of script)

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

Je kunt een batch script maken en het in je pad opslaan.

Op Linux zou je een script maken en het toevoegen aan de map ~/bin op windows kun je hetzelfde doen.

Voeg %USERPROFILE%\bin toe aan je PATH omgevingsvariabele. Sla dan je scripts daarin op.

quickcd.cmd

@echo off
cd /d a_very_long_path

Nu kun je quickcd typen op de commandoregel.

Het kan ook in een script aangeroepen worden met de call functie

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

subst

Als je echt probeert om zoiets als dit te omzeilen:

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

Je kunt het commando subst gebruiken om dat lange pad naar een aparte stationsletter te mappen

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

Dan kun je, als je in die map wilt springen, gewoon m: typen op de commandoregel.

Het voordeel hiervan boven doskey is dat het in alle batch programma’s werkt, en in elk bestandsdialoogvenster in Windows verschijnt.

Als je de mapping niet meer wilt:

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

Je zou dezelfde truc kunnen gebruiken die windows gebruikt: stel een omgevingsvariabele in (of gewoon een variabele in een batch-context) bijvoorbeeld er is een omgevingsvariabele %windir% (en sommige anderen) Dus je kunt een

cd C:\Windows\

of

doen wat hetzelfde doet. Dus alles wat je hoeft te doen is:

cd %windir%

daarna kun je doen (van waar je ook bent):

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

of

dir %mydir%

of wat je maar wilt.

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

Ik heb zo'n “alias” gemaakt speciaal voor het veranderen van map. In principe heb ik een bestand gemaakt met de naam fav.bat en dat in een map in PATH gezet (b.v. 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

Dan kan ik heel snel naar elke voorgedefinieerde map springen. Ik heb een volledig artikel over die techniek geschreven hier .

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

Je kunt doskey.exe gebruiken, hier is een voorbeeld:

doskey qcd=cd [pathname]

En als je nu qcd intypt dan cd hij naar dat pad.

Hier is wat hulp met doskey macro’s:

doskey [macroname]=[command]

Dat is de eenvoudigste vorm, hier is een voorbeeld:

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

en als je nu word typt dan is de output:

Dit is een hele, hele lange zin.

Je kunt $1-$9 gebruiken voor parameters, hier is een voorbeeld:

doskey npd=notepad $1

en als je npd typt opent hij notepad maar als we npd test.txt typen opent hij test.txt in notepad.

Je kunt $* gebruiken voor alle parameters, hier is nog een voorbeeld:

doskey prt=echo $*

en als je prt This is short. typt dan zal de output zijn:

Dit is kort.

Je kunt $T gebruiken voor meerdere commando’s, hier is een voorbeeld:

doskey newline=echo $1 $T echo $2

en als je newline Hello and typt dan zal de output zijn:

Hallo

en

Ik hoop dat je het begrijpt.

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

ervan uitgaande dat je op dezelfde schijf blijft, dus geen D: dan cd D:\somedirervan uitgaande dat je op dezelfde schijf blijft, dus geenD:` dan nodig.

In mijn geval, C: bevat systeembestanden, maar al het werk is op D:

2 delen. stel eerst wat werkdirectories in, met behulp van een batch bestand.

laten we zeggen localprofile.cmd. Je kunt er meerdere van hebben, voer ze gewoon uit als het nodig is.

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

gebruik nu een ander batchbestand om te verplaatsen, gebaseerd op de omgevingsvariabelen die je net hebt ingesteld.

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%

En een beetje een voorbeeld gebruik:

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 zelf wordt verondersteld om mij de lijst van gebookmerkte mappen te tonen. Het werkt, maar ik weet niet zeker waarom ik deze “onverwachte cd” melding krijg.

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>

Gewone .cmd batches

Behalve directory navigatie, kun je een foo.cmd ergens op je PATH aanmaken en het kan veel als een alias fungeren. Onthoud dat, in tegenstelling tot Linux/OSX shells, cmd bestanden omgevingsvariabelen en de sessie kunnen beïnvloeden, zonder dat je ze hoeft te sourcen.

Ik heb een cdbin.cmd om me te navigeren, bijvoorbeeld:

d:
cd \home\bin

En dit is een pseudo-grep grep.cmd

findstr -n %1 %2

in actie (wat sort /+2 /+10 ook betekent)

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):