Bagaimana cara mengatur alias di Windows Command Line?

66

Saya dulu bekerja di bash dan mendapat banyak manfaat dari alias. Apakah ada cara yang setara di Windows Command Line?

Saya tidak ingin mensimulasikan lingkungan Linux, jadi cygwin bukan pilihan. Saya hanya perlu beberapa jalan pintas untuk beberapa perintah yang sangat panjang, seperti cd a_very_long_path.

StarPinkER
sumber
5
Anda akan menggunakan doskey(jangan tertipu oleh nama itu bukan doskey MS DOS lama). Gunakan doskey /?untuk informasi lebih lanjut. Selain itu, saya khawatir, pertanyaan ini di luar topik di sini.
Christian.K
Kemungkinan duplikat Apakah ada perintah untuk mengubah jalur dari lokasi saat ini ke direktori default, pada prompt perintah Windows? Secara khusus, lihat jawaban saya untuk mengetahui bagaimana Anda dapat membuat makro DOSKey Anda dimuat secara otomatis ketika Command Prompt dibuka.
Karan
terkait + cara membuat doskey permanen superuser.com/questions/49170/…
laggingreflex

Jawaban:

61

Seperti yang Christian.K katakan dalam komentarnya, perintah DOSKEY dapat digunakan untuk mendefinisikan makro, yang analog dengan alias.

doskey macroName=macroDefinition

Parameter makro direferensikan dalam definisi melalui $posisi awalan: $1melalui $9dan $*untuk semua.

Lihat dokumentasi teknik doskey , atau ketik doskey /?atau help doskeydari baris perintah untuk informasi lebih lanjut.

Tetapi ada batasan serius dengan makro DOSKEY:

  • Makro hanya bekerja pada baris perintah interaktif - mereka tidak bekerja dalam skrip batch.
  • Mereka tidak dapat digunakan di kedua sisi pipa: Keduanya someMacro|findstr '^'dan dir|someMacrogagal.
  • Mereka tidak dapat digunakan dalam perintah FOR / F: for /f %A in ('someMacro') do ...gagal

Batasannya sangat parah sehingga saya jarang menggunakan macro DOSKEY.

Jelas Anda dapat membuat skrip batch bukan makro, dan pastikan lokasi skrip berada di PATH Anda. Tetapi kemudian Anda harus mengawali setiap skrip dengan CALL jika Anda ingin menggunakan skrip dalam skrip lain.

Anda bisa membuat variabel "makro" sederhana untuk perintah yang lama dan sering digunakan, tetapi sintaks agak canggung untuk mengetik, karena Anda perlu memperluas "makro" ketika Anda ingin menggunakannya.

Definisi:

set "cdMe=cd a_very_long_path"

Penggunaan (dari baris perintah atau skrip)

%cdMe%
dbenham
sumber
Terima kasih, lalu apakah ada cara untuk bekerja dalam skrip batch?
StarPinkER
@JermaineXu - Tidak mungkin dengan macro DOSKEY. Lihat jawaban saya yang diperbarui untuk alternatif kasar.
dbenham
2
Pro dari solusi kedua adalah, perpipaan akan berfungsi. Solusi pertama dengan doskey tidak akan berfungsi ketika Anda ingin menggunakan makro dalam pemipaan.
CEO di Apartico
? bagaimana saya bisa membuat makro ini terlihat pada kotak Win + R (Run dialog)
ZEE
@ZEE - Anda tidak bisa. Macro DOSKEY harus dimasukkan secara fisik ke jendela konsol yang menjalankan cmd.exe.
dbenham
15

Anda dapat membuat skrip batch dan menyimpannya ke jalur Anda.

Di Linux Anda akan membuat skrip dan menambahkannya ke folder ~/bindi windows Anda dapat melakukan hal yang sama.

Tambahkan %USERPROFILE%\binke PATHvariabel lingkungan Anda . Kemudian simpan skrip Anda di sana.

quickcd.cmd

@echo off
cd /d a_very_long_path

Sekarang Anda bisa mengetik quickcddi baris perintah.

Itu juga bisa disebut di dalam skrip menggunakan callfungsi

call quickcd
William Bettridge-Radford
sumber
Ini tidak berfungsi - pengaturan direktori dalam file batch hanya memengaruhi file batch. Jalur kembali ketika file batch keluar.
Shadow
1
Ini bekerja untuk saya. Microsoft Windows [Version 10.0.17134.648]
William Bettridge-Radford
Itu sangat aneh. Jadi, jika Anda menyalin dan menempelkan contoh di atas (mengubah direktori ke yang ada) itu bekerja untuk Anda?
Shadow
Apakah folder Anda di drive lain? Anda mungkin perlu menambahkan /dbendera keCD
William Bettridge-Radford
13

subst

Jika Anda benar-benar berusaha menyiasati sesuatu seperti ini:

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

Anda dapat menggunakan substperintah untuk memetakan jalur panjang itu ke huruf drive terpisah

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

Kemudian, ketika Anda ingin melompat ke folder itu, Anda bisa mengetik m:di baris perintah.

Kelebihan dari ini doskeyadalah bahwa ia bekerja di semua program batch, dan muncul di kotak dialog file apa pun di dalam Windows.

Jika Anda tidak ingin pemetaan lagi:

subst m: /D
Harley Young
sumber
3
Saya juga suka ini tetapi TIDAK memakan huruf drive.
ggb667
8

Anda bisa menggunakan trik yang sama, yang digunakan windows: mengatur variabel lingkungan (atau hanya variabel dalam konteks batch) misalnya ada variabel lingkungan% windir% (dan beberapa lainnya) sehingga Anda dapat melakukan

cd C:\Windows\

atau

cd %windir%

yang melakukan hal yang sama. Jadi yang harus Anda lakukan adalah:

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

setelah itu Anda dapat melakukan (dari mana pun Anda berada):

dir %mydir%

atau

cd %mydir%

atau apapun yang kamu mau.

stephan
sumber
1
Itu adalah tiket @stephan!
jbchurchill
3

Tidak seperti Linux, pada Windows alias dapat mengambil argumen, dan dapat diberikan parameter untuk menetapkan argumen tersebut dalam definisi mereka.

Perintah internal internal adalah doskey , yang berarti itu bukan file eksternal yang dapat dieksekusi yang terletak di %SystemRoot%\System32tetapi merupakan fitur cmd.exeyang terletak di dalam %SystemRoot%atau %Windir%keduanya menunjuk ke C:\Windowsfolder secara default.

Doskey mendefinisikan alias di antara banyak hal lainnya. Dalam terminologi Windows, alias disebut macro. Untuk mengatur alias yang Anda gunakan

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

Di sini $1menunjuk ke argumen pertama, dan $*menunjuk ke semua argumen.

Saya akan selalu menggunakan $*dan menggandakan kutipan $1jika hanya ada satu argumen untuk menghilangkan spasi yang diperlakukan sebagai karakter khusus, yaitu sebagai pemisah (untuk perintah).

Selain itu, Anda dapat menentukan makro alias Anda di file terpisah, katakan LinuxAliases.macrodan kemudian gunakan sumber itu

doskey /macrofile=LinuxAliases.macro

Ini akan memuat semua alias yang didefinisikan di dalam file hanya untuk sesi saat ini , yang berarti ketika Anda exitkeluar dari cmd.exeproses (juga dikenal sebagai shell dan Command Prompt), mereka hilang.

Untuk memiliki alias permanen, Anda dapat mengetikkan perintah lengkap di suatu tempat di kunci regedit yang disebut AutoRun atau AutoCommand atau yang serupa, yang tidak dapat saya ingat sekarang di samping sintaks internal file makro: P


Berikut adalah dokumen resmi , dan bahkan yang lebih baik untuk perintah ini.


sumber
1

Saya telah membuat "alias" seperti itu khusus untuk mengubah direktori. Pada dasarnya saya membuat file bernama fav.batdan memasukkannya ke folder di PATH (mis. 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

Lalu saya bisa melompat ke folder yang sudah ditentukan sebelumnya dengan sangat cepat. Saya menulis artikel lengkap tentang teknik itu di sini .

VitalyB
sumber
0

dengan asumsi Anda tetap pada drive yang sama, yaitu tidak ada D:maka cd D:\somedir\diperlukan.

Dalam kasus saya, C: menyimpan file sistem, tetapi semua pekerjaan ada di D:

2 bagian. pertama-tama atur beberapa direktori yang berfungsi, menggunakan file batch.

katakanlah localprofile.cmd . Anda dapat memiliki lebih dari satu ini, jalankan saja sesuai kebutuhan.

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

sekarang gunakan file perintah lain untuk berpindah, berdasarkan variabel lingkungan yang baru saja Anda atur.

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%

Dan sedikit contoh penggunaan:

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 dengan sendirinya seharusnya menunjukkan kepada saya daftar direktori yang ditandai. Ini berfungsi, tetapi tidak yakin mengapa saya menerima pesan "cd tak terduga" ini.

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> 

Batch .cmd biasa

Selain dari navigasi direktori, Anda dapat membuat foo.cmd di suatu tempat di PATH Anda dan dapat bertindak banyak sebagai alias. Ingat, tidak seperti cangkang Linux / OSX, file cmd dapat memengaruhi variabel lingkungan dan sesi, tanpa perlu sumber mereka.

Saya memiliki cdbin.cmd untuk menavigasi saya, misalnya:

d:
cd \home\bin

Dan ini adalah grep.cmd pseudo-grep

findstr -n %1 %2

dalam aksi (apa pun arti / + 2 / + 10)

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
sumber
0

Anda dapat menggunakan doskey.exe , berikut adalah contohnya:

doskey qcd=cd [pathname]

Dan sekarang jika Anda mengetik qcdmaka akan cd ke jalur itu.

Berikut ini beberapa bantuan dengan doskey macro:

doskey [macroname]=[command]

Itu adalah bentuk paling sederhana, berikut ini contohnya:

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

dan jika Anda mengetik wordoutputnya adalah:

Ini adalah kalimat yang sangat, sangat panjang.

Anda dapat menggunakan $ 1- $ 9 untuk parameter, berikut adalah contohnya:

doskey npd=notepad $1

dan jika Anda mengetiknya npdakan membuka notepad tetapi jika kita mengetiknya npd test.txtakan membuka test.txt di notepad .

Anda dapat menggunakan $ * untuk semua parameter, berikut adalah contoh lain:

doskey prt=echo $*

dan jika Anda mengetik prt This is short.maka outputnya adalah:

Ini pendek.

Anda dapat menggunakan $ T untuk banyak perintah, berikut ini sebuah contoh:

doskey newline=echo $1 $T echo $2

dan jika Anda mengetik newline Hello andmaka outputnya adalah:

Halo

dan

Saya harap Anda mengerti.

Hayz
sumber