विंडोज कमांड लाइन में एक उपनाम कैसे सेट करें?


66

मैं उबाने से काम करता था और अलियास से बहुत लाभ उठाता था। क्या विंडोज कमांड लाइन में कोई समकक्ष तरीका है?

मैं लिनक्स वातावरण का अनुकरण नहीं करना चाहता, इसलिए साइबरविन एक विकल्प नहीं है। मुझे बस कुछ बहुत लंबे कमांड के लिए कुछ शॉर्टकट की आवश्यकता है, जैसे cd a_very_long_path


5
आप उपयोग करेंगे doskey(नाम से मूर्ख मत बनो यह पुराना MS DOS doskey नहीं है)। doskey /?अधिक जानकारी के लिए उपयोग करें । इसके अलावा, मुझे डर है, यह सवाल यहाँ विषय से दूर है।
क्रिश्चियन.के

के संभावित डुप्लिकेट वहाँ विंडोज कमांड प्रॉम्प्ट में वर्तमान स्थान से पथ को बदलने के लिए निर्देशिका डिफ़ॉल्ट, एक कमांड है? विशेष रूप से, कमांड प्रॉम्प्ट के खुलने पर आप अपना DOSKey मैक्रोज़ ऑटो-लोड कैसे कर सकते हैं , यह जानने के लिए मेरा उत्तर देखें ।
करण

संबंधित + स्थायी doskey बनाने के लिए एक तरह से superuser.com/questions/49170/...
laggingreflex

जवाबों:


61

जैसा कि क्रिश्चियन.के ने अपनी टिप्पणी में कहा, DOSKEY कमांड का उपयोग मैक्रोज़ को परिभाषित करने के लिए किया जा सकता है, जो उपनामों के अनुरूप हैं।

doskey macroName=macroDefinition

$पूर्व-निर्धारित पदों के $1माध्यम से $9और $*सभी के लिए : मैक्रो मापदंडों को परिभाषा में संदर्भित किया जाता है ।

देखें doskey TechNet प्रलेखन , या प्रकार doskey /?या help doskeyकमांड लाइन से अधिक जानकारी के लिए।

लेकिन डॉस मैक्रों के साथ गंभीर सीमाएँ हैं:

  • मैक्रोज़ केवल इंटरेक्टिव कमांड लाइन पर काम करते हैं - वे एक बैच स्क्रिप्ट के भीतर काम नहीं करते हैं।
  • उनका उपयोग पाइप के दोनों ओर नहीं किया जा सकता है: दोनों someMacro|findstr '^'और dir|someMacroविफल।
  • उनका उपयोग FOR / F कमांड के भीतर नहीं किया जा सकता: for /f %A in ('someMacro') do ...विफल

सीमाएं इतनी गंभीर हैं कि मैं शायद ही कभी डॉक्स मैक्रोज़ का उपयोग करता हूं।

जाहिर है कि आप मैक्रोज़ के बजाय बैच स्क्रिप्ट बना सकते हैं, और सुनिश्चित कर सकते हैं कि स्क्रिप्ट स्थान आपके पेट में हैं। लेकिन तब आपको CALL के साथ प्रत्येक स्क्रिप्ट को उपसर्ग करना होगा यदि आप किसी अन्य स्क्रिप्ट के भीतर स्क्रिप्ट का उपयोग करना चाहते हैं।

आप लंबे और बार इस्तेमाल किए जाने वाले कमांड के लिए सरल चर "मैक्रोज़" बना सकते हैं, लेकिन सिंटैक्स टाइप करने के लिए थोड़ा अजीब है, क्योंकि आपको "मैक्रो" का विस्तार करने की आवश्यकता है जब आप इसका उपयोग करना चाहते हैं।

परिभाषा:

set "cdMe=cd a_very_long_path"

उपयोग (कमांड लाइन या स्क्रिप्ट से)

%cdMe%

धन्यवाद, फिर क्या बैच स्क्रिप्ट के भीतर काम करने का कोई तरीका है?
स्टारपिन्कर

@JermaineXu - डॉस मैक्रों के साथ कोई रास्ता नहीं। कच्चे विकल्प के लिए मेरा अद्यतन उत्तर देखें।
डेबनहम

2
दूसरे समाधान का समर्थक यह है कि, पाइपिंग काम करेगा। जब आप पाइपिंग में मैक्रो का उपयोग करना चाहते हैं, तो डॉसकी के साथ पहला समाधान काम नहीं करेगा।
CEOइंडिको डिक्लेयर 20’14

? मैं इस मैक्रोज़ को विन + आर बॉक्स (रन डायलॉग) को कैसे दिखा सकता हूं
ZEE

@ZEE - आप नहीं कर सकते। डॉक्सी मैक्रों को भौतिक रूप से एक कंसोल विंडो में बंद किया जाना चाहिए जो cmd.exe चल रहा है।
denham

15

आप एक बैच स्क्रिप्ट बना सकते हैं और इसे अपने रास्ते में सहेज सकते हैं।

लिनक्स पर आप एक स्क्रिप्ट बनाते हैं और इसे ~/binविंडोज़ पर फ़ोल्डर में जोड़ते हैं जो आप वही कर सकते हैं।

%USERPROFILE%\binअपने PATHपर्यावरण चर में जोड़ें । फिर वहां अपनी स्क्रिप्ट्स को सेव करें।

quickcd.cmd

@echo off
cd /d a_very_long_path

अब आप quickcdकमांड लाइन पर टाइप कर सकते हैं ।

इसे callफंक्शन का उपयोग करके स्क्रिप्ट के अंदर भी बुलाया जा सकता है

call quickcd

यह काम नहीं करता - निर्देशिका को बैच फ़ाइल में सेट करना केवल बैच फ़ाइल को प्रभावित करता है। जब पथ बैच फ़ाइल से बाहर निकलता है तो पथ बदल जाता है।
छाया

1
यह मेरे लिए काम कर रहा है। Microsoft Windows [Version 10.0.17134.648]
विलियम बेट्रिज-रेडफोर्ड

यह वास्तव में अजीब है। इसलिए यदि आप उपरोक्त उदाहरण को कॉपी और पेस्ट करते हैं (निर्देशिका को उस पर मौजूद है) तो यह आपके लिए काम करता है?
छाया

क्या आपका फ़ोल्डर किसी अन्य ड्राइव पर है? आपको /dध्वज को जोड़ने की आवश्यकता हो सकती हैCD
विलियम बेटट्रिज-रेडफोर्ड

13

subst

यदि आप वास्तव में ऐसा कुछ पाने की कोशिश कर रहे हैं:

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

आप substउस लंबे पथ को अलग ड्राइव अक्षर पर मैप करने के लिए कमांड का उपयोग कर सकते हैं

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

फिर, जब आप उस फ़ोल्डर में कूदना चाहते हैं, तो आप m:कमांड लाइन पर टाइप कर सकते हैं ।

इस ओवर doskeyका लाभ यह है कि यह सभी बैच कार्यक्रमों में काम करता है, और विंडोज के भीतर किसी भी फ़ाइल संवाद बॉक्स में दिखाई देता है।

यदि आप मानचित्रण नहीं चाहते हैं:

subst m: /D

3
मुझे भी यह पसंद है लेकिन यह ड्राइव अक्षर को खा जाता है।
ggb667

8

आप एक ही ट्रिक का उपयोग कर सकते हैं, जो विंडोज़ उपयोग करता है: एक पर्यावरण-चर (या एक बैच-संदर्भ में सिर्फ एक चर) सेट करें उदाहरण के लिए एक पर्यावरण-चर% windir% है (और कुछ अन्य) तो आप एक कर सकते हैं

cd C:\Windows\

या

cd %windir%

जो करता है वही करता है। तो आपको बस इतना करना है:

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

उसके बाद आप (जहाँ से भी आप कर सकते हैं):

dir %mydir%

या

cd %mydir%

या जो भी आप चाहते हैं।


1
वो टिकट है @stephan!
jbchurchill

3

लिनक्स के विपरीत, विंडोज में उपनाम तर्क ले सकते हैं, और उन तर्कों को अपनी परिभाषा में निर्दिष्ट करने के लिए पैरामीटर दिए जा सकते हैं।

आंतरिक अंतर्निहित कमांड दोसी है , जिसका अर्थ है कि यह एक बाहरी निष्पादन योग्य फ़ाइल नहीं है, %SystemRoot%\System32लेकिन इसकी एक विशेषता है cmd.exeजो स्वयं डिफ़ॉल्ट रूप से फ़ोल्डर में %SystemRoot%या %Windir%दोनों ओर स्थित है C:\Windows

डोसकी कई अन्य चीजों के बीच उपनामों को परिभाषित करता है। विंडोज शब्दावली में, उपनाम को मैक्रोज़ कहा जाता है। आपके द्वारा उपयोग किए जाने वाले उपनाम को सेट करने के लिए

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

यहाँ $1पहले तर्क की ओर इशारा किया गया, और $*सभी तर्कों की ओर इशारा किया गया।

यदि रिक्त स्थान को अलग-अलग वर्णों के रूप में, अलग-अलग वर्णों (कमांड के लिए) के रूप में मानने के लिए केवल एक तर्क है, तो मैं हमेशा उपयोग करूंगा $*और दोहरा उद्धरण $1दूंगा।

इसके अलावा, आप अपने उपनामों को एक अलग फ़ाइल में मैक्रोज़ परिभाषित कर सकते हैं , कह सकते हैं LinuxAliases.macroऔर फिर इसका उपयोग करके स्रोत बना सकते हैं

doskey /macrofile=LinuxAliases.macro

यह वर्तमान सत्र के लिए फ़ाइल के अंदर परिभाषित सभी उपनामों को लोड करेगा , जब आप प्रक्रिया से exitबाहर होते हैं cmd.exe( शेल और कमांड प्रॉम्प्ट के रूप में भी जाना जाता है ), वे चले गए हैं।

स्थायी उपनाम रखने के लिए आप पूरी कमांड को किसी भी regedit कुंजी में कहीं भी टाइप कर सकते हैं जिसे या तो AutoRun या AutoCommand या कुछ इसी तरह का कहा जाता है, जो कि मैं अब याद नहीं कर सकता मैक्रो फ़ाइल के आंतरिक सिंटैक्स के साथ: P


यहां आधिकारिक और कमांड के लिए और भी बेहतर दस्तावेज़ हैं।


1

मैंने एक "उपनाम" बनाया है जो विशेष रूप से निर्देशिका बदलने के लिए है। मूल रूप से मैंने एक फाइल बनाई है जिसका नाम fav.batPATH (जैसे 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

फिर मैं बहुत जल्दी किसी भी पूर्वनिर्धारित फ़ोल्डर में कूद सकता हूं। मैंने यहाँ उस तकनीक के बारे में एक पूरा लेख लिखा ।


0

यह मानते हुए कि आप एक ही ड्राइव पर बने रहते हैं, यानी D:तब cd D:\somedir\जरूरत नहीं थी।

मेरे मामले में, C: सिस्टम फ़ाइलों को रखता है, लेकिन सभी कार्य D पर हैं:

2 भागों। पहले बैच फ़ाइल का उपयोग करते हुए कुछ कार्यशील निर्देशिकाओं को सेट करें।

मान लीजिए कि localprofile.cmd है । आपके पास इनमें से कई हो सकते हैं, बस उन्हें आवश्यकतानुसार चलाएं।

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

अब उन चारों ओर जाने के लिए एक अन्य कमांड फ़ाइल का उपयोग करें, जो आपके द्वारा सेट किए गए वातावरण चर पर आधारित हैं।

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%

और एक नमूना उपयोग की एक बिट:

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 अपने आप में मुझे बुकमार्क निर्देशिकाओं की सूची दिखाने वाला है। यह काम करता है, लेकिन निश्चित नहीं है कि मुझे यह "अप्रत्याशित सीडी" संदेश क्यों मिल रहा है।

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> 

नियमित .cmd बैच

निर्देशिका नेविगेशन के अलावा, आप अपने PATH पर कहीं भी एक foo.cmd बना सकते हैं और यह एक उपनाम के रूप में ज्यादा कार्य कर सकता है। याद रखें, लिनक्स / OSX गोले के विपरीत, cmd फाइलें पर्यावरण चर और सत्र को प्रभावित कर सकती हैं, उन्हें स्रोत की आवश्यकता के बिना ।

उदाहरण के लिए, मुझे नेविगेट करने के लिए एक cdbin.cmd है:

d:
cd \home\bin

और यह एक छद्म grep grep.cmd है

findstr -n %1 %2

कार्रवाई में (जो भी प्रकार / + 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):                       

0

आप doskey.exe का उपयोग कर सकते हैं , यहाँ एक उदाहरण है:

doskey qcd=cd [pathname]

और अब अगर आप टाइप qcdकरेंगे तो यह उस रास्ते पर cd आएगा ।

यहाँ doskey मैक्रो के साथ कुछ मदद है :

doskey [macroname]=[command]

यह सबसे सरल रूप है, यहाँ एक उदाहरण है:

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

और अगर आप wordआउटपुट टाइप करते हैं:

यह वास्तव में, वास्तव में लंबा वाक्य है।

आप मापदंडों के लिए $ 1- $ 9 का उपयोग कर सकते हैं, यहां एक उदाहरण है:

doskey npd=notepad $1

और यदि आप टाइप npdकरते हैं तो यह नोटपैड को खोलेगा लेकिन अगर हम टाइप npd test.txtकरते हैं तो यह नोटपैड में test.txt को खोलेगा ।

आप सभी मापदंडों के लिए $ * का उपयोग कर सकते हैं, यहां एक और उदाहरण दिया गया है:

doskey prt=echo $*

और यदि आप टाइप prt This is short.करेंगे तो आउटपुट होगा:

यह छोटा है।

आप कई आदेशों के लिए $ T का उपयोग कर सकते हैं, यहाँ एक उदाहरण है:

doskey newline=echo $1 $T echo $2

और यदि आप टाइप newline Hello andकरेंगे तो आउटपुट होगा:

नमस्ते

तथा

मुझे आशा है की तुम समझ गए होगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.