Windows Komut Satırı'nda bir diğer ad nasıl ayarlanır?


66

Ben bash üzerinde çalışırdım ve takma adlardan çok yararlanırdım. Windows Komut Satırı'nda eşdeğer bir yol var mı?

Bir Linux ortamını simüle etmek istemiyorum, bu yüzden cygwin bir seçenek değil. Sadece çok uzun bir komut için bazı kısayollara ihtiyacım var cd a_very_long_path.


5
Kullanacak doskey(eski MS DOS doskey değil adıyla kanmayın). doskey /?Daha fazla bilgi için kullanın . Bunun dışında, korkarım, bu soru burada konu dışı.
Christian.K

Olası yinelenen, Windows komut isteminde yolu geçerli konumdan varsayılan dizine değiştirme komutu var mı? Özellikle, bkz cevabım size Komut İstemi açıldığında sizin DOSKEY makro otomatik yüklenen olmak zorunda nasıl olur.
Karan

related + doskey'i kalıcı kılmanın bir yolu superuser.com/questions/49170/…
laggingreflex

Yanıtlar:


61

Christian.K'nın yorumunda söylediği gibi, DOSKEY komutu takma adlara benzer makroları tanımlamak için kullanılabilir.

doskey macroName=macroDefinition

Makro parametreleri, tanımda önceden belirlenmiş $konumlar aracılığıyla başvurulur : $1yoluyla $9ve $*herkes için.

Daha fazla bilgi için doskey technet belgelerine bakın veya yazın doskey /?ya help doskeyda komut satırından.

Ancak DOSKEY makrolarıyla ciddi sınırlamalar var:

  • Makrolar yalnızca etkileşimli komut satırında çalışır; toplu komut dosyasında çalışmazlar.
  • Her ikisi de: Bir borunun her iki tarafında kullanılamaz someMacro|findstr '^'ve dir|someMacrobaşarısız.
  • Bir FOR / F komutları içinde kullanılamazlar: for /f %A in ('someMacro') do ...başarısız

Sınırlamalar o kadar şiddetli ki DOSKEY makrolarını nadiren kullanıyorum.

Açıkçası, makrolar yerine toplu komut dosyaları oluşturabilir ve komut dosyası konumlarının PATH'nizde bulunduğundan emin olabilirsiniz. Ancak, komut dosyasını başka bir komut dosyasında kullanmak istiyorsanız, her komut dosyasını CALL ile öneklemelisiniz.

Uzun ve sık kullanılan komutlar için basit "makrolar" değişkeni oluşturabilirsiniz, ancak sözdizimi yazmak biraz gariptir çünkü kullanmak istediğinizde "makro" yu genişletmeniz gerekir.

Tanım:

set "cdMe=cd a_very_long_path"

Kullanım (komut satırından veya komut dosyasından)

%cdMe%

Teşekkürler, o zaman bir toplu komut dosyası içinde çalışmak için herhangi bir yolu var mı?
StarPinkER

@JermaineXu - DOSKEY makrolarıyla mümkün değil. Ham alternatifler için güncellenmiş cevabımı görün.
dbenham,

2
İkinci çözümün uzmanı, boruların çalışacağıdır. Makroyu borularda kullanmak istediğinizde doskey ile ilk çözüm işe yaramaz.
Apartico'da CEO

Bu makroları Win + R kutusuna nasıl görünür hale getirebilirim (Çalıştır iletişim kutusu)
ZEE

@ZEE - Yapamazsınız. DOSKEY makrolarının fiziksel olarak cmd.exe çalıştıran bir konsol penceresine kilitlenmesi gerekir.
dbenham

15

Bir toplu iş komut dosyası yapabilir ve onu yolunuza kaydedebilirsiniz.

Linux'ta bir komut dosyası hazırlar ve bunu ~/binaynısını yapabileceğiniz pencerelerdeki klasöre eklersiniz .

Ekle %USERPROFILE%\binsizin için PATHortam değişkeni. Sonra komut dosyalarınızı oraya kaydedin.

quickcd.cmd

@echo off
cd /d a_very_long_path

Şimdi quickcdkomut satırına yazabilirsiniz .

callFonksiyonu kullanarak bir betiğin içinde de çağırılabilir.

call quickcd

Bu işe yaramaz - dizini bir toplu iş dosyasında ayarlamak yalnızca toplu iş dosyasını etkiler. Toplu iş dosyası çıktığında yol geri döner.
Gölge

1
Benim için çalışıyor. Microsoft Windows [Version 10.0.17134.648]
William Bettridge-Radford

Bu gerçekten garip. Öyleyse yukarıdaki örneği kopyalayıp yapıştırırsanız (dizini var olana çevirerek) sizin için işe yarıyor mu?
Gölge

Klasörünüz başka bir sürücüde mi? /dBayrak eklemeniz gerekebilirCD
William Bettridge-Radford

13

subst

Gerçekten böyle bir şeyle uğraşmaya çalışıyorsanız:

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

Bu substuzun yolu ayrı bir sürücü harfine eşlemek için komutu kullanabilirsiniz.

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

Ardından, bu klasöre atlamak istediğinizde, sadece m:komut satırına yazabilirsiniz .

Bunun avantajı doskeytüm toplu iş programlarında çalışması ve Windows içindeki herhangi bir dosya iletişim kutusunda görünmesidir.

Haritalamayı artık istemiyorsanız:

subst m: /D

3
Bunu da seviyorum ama sürücü harflerini yiyor.
ggb667

8

Pencerelerin kullandığı aynı numarayı kullanabilirsiniz: örneğin bir ortam değişkenini (ya da sadece toplu bağlamdaki bir değişkeni) ayarlayın; örneğin, bir ortam değişkeni% windir% (ve diğerleri) vardır.

cd C:\Windows\

veya

cd %windir%

bu da aynı şeyi yapıyor. Yani, tüm yapmanız gereken:

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

Bundan sonra (nerede olursanız olun) yapabilirsiniz:

dir %mydir%

veya

cd %mydir%

ya da ne istersen.


1
Bu @ stephan bilet!
jbchurchill

3

Linux'un aksine, Windows takma adları argümanlar alabilir ve bu argümanları tanımlarına atamak için parametreler verilebilir.

Dahili yerleşik komut doskeydir , yani içinde yer alan harici bir çalıştırılabilir dosya değildir, %SystemRoot%\System32ancak varsayılan olarak klasöre işaret eden ya da her ikisinin de cmd.exebulunduğu bir özelliktir .%SystemRoot%%Windir%C:\Windows

Doskey diğer adları arasında takma adları tanımlar. Windows terminolojisinde takma ad makro olarak adlandırılır. Kullandığınız takma adı ayarlamak için

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

Burada $1ilk argümanı $*işaret eder ve tüm argümanları işaret eder.

Ayırıcılar (komutlar için) gibi özel karakterler olarak nitelendirilen boşlukları atlamak için tek bir argüman varsa, her zaman kullanır $*ve çift alıntı yapardım $1.

Ayrıca, takma ad makrolarınızı ayrı bir dosyada tanımlayabilir , söyleyip LinuxAliases.macrosonra

doskey /macrofile=LinuxAliases.macro

Bu, mevcut için dosya içindeki tanımlanan tüm adlar yükleyecektir oturumda ne zaman, yani sadece exitdışarı cmd.exesüreci (olarak da bilinen kabuk ve Komut İstemi), gittiler.

Kalıcı takma adlara sahip olmak için, tam komutu AutoRun veya AutoCommand adlı bir regedit anahtarında bir yere ya da benzer bir şey yazabilirsiniz, şimdi makro dosyasının dahili sözdiziminin yanında hatırlayamadığım şey: P


İşte emir için resmi ve hatta daha iyi belgeler.


1

Dizini değiştirmek için özel olarak böyle bir "takma" yaptım. Temel olarak bir dosya yarattım fav.batve onu PATH içindeki bir klasöre koydum (örn. 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

Sonra çok hızlı bir şekilde önceden tanımlanmış herhangi bir klasöre atlayabilirim. Bu teknik hakkında burada tam bir makale yazdım .


0

Aynı sürücüde kaldığınızı varsayalım, yani D:daha sonra cd D:\somedir\gerek yok .

Benim durumumda, C: sistem dosyalarını tutar, fakat tüm işler D’dedir:

2 parça ilk önce bir toplu iş dosyası kullanarak bazı çalışma dizinleri ayarlayın.

Diyelim ki localprofile.cmd . Bunlardan birden fazla olabilir, sadece gerektiği gibi çalıştırın.

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

Şimdi ayarladığınız ortam değişkenlerini temel alarak hareket etmek için başka bir komut dosyası kullanın.

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%

Ve bir örnek kullanım biraz:

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, kendisinin yer imlerine eklenmiş dizinlerin listesini göstermesi gerekiyor. Çalışıyor, ancak neden bu "beklenmeyen cd" iletisini alıyorum emin değilim.

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> 

Düzenli .cmd partiler

Dizin gezintisinin yanı sıra, PATH'inizde bir yerde bir foo.cmd oluşturabilir ve takma ad olarak işlev görebilir. Unutmayın Linux / OSX kabukları aksine, cmd dosyaları gerek kalmadan, çevre değişkenleri ve oturumu etkileyebilir kaynak onları.

Bana yönlendirmek için bir cdbin.cmd var, örneğin:

d:
cd \home\bin

Ve bu bir sözde grep grep.cmd

findstr -n %1 %2

İşlemde (sıralama / + 2 / + 10 ne olursa olsun)

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

Doskey.exe'yi kullanabilirsiniz , işte bir örnek:

doskey qcd=cd [pathname]

Ve şimdi yazarsanız o yolu cdqcd olacaktır .

Doskey macro ile ilgili bazı yardımlar :

doskey [macroname]=[command]

Bu en basit şekli, işte bir örnek:

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

ve eğer yazarsanız wordçıktı:

Bu gerçekten, gerçekten uzun bir cümledir.

Parametreler için $ 1- $ 9 kullanabilirsiniz, işte bir örnek:

doskey npd=notepad $1

ve yazarsanız npdo açılacaktır notepad ama biz yazarsanız npd test.txto açılacaktır sınama.txt içinde not defteri .

Tüm parametreler için $ * kullanabilirsiniz, işte bir başka örnek:

doskey prt=echo $*

ve yazarsanız prt This is short.çıktı:

Bu kısa.

$ T'yi çoklu komutlar için kullanabilirsiniz, işte bir örnek:

doskey newline=echo $1 $T echo $2

ve yazarsanız newline Hello andçıktı:

Merhaba

ve

Umarım anlarsın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.