วิธีตั้งค่านามแฝงใน Windows Command Line


66

ฉันเคยทำงานเกี่ยวกับทุบตีและได้รับประโยชน์มากมายจากนามแฝง มีวิธีใดที่เทียบเท่าใน Windows Command Line?

ฉันไม่ต้องการจำลองสภาพแวดล้อม Linux ดังนั้น cygwin จึงไม่ใช่ตัวเลือก cd a_very_long_pathฉันเพียงแค่ต้องทางลัดบางอย่างสำหรับบางคำสั่งที่ยาวมากเช่น


5
คุณจะใช้doskey(ไม่หลงกลโดยชื่อไม่ใช่ MS DOS doskey) ใช้doskey /?สำหรับข้อมูลเพิ่มเติม นอกจากนั้นฉันเกรงว่าคำถามนี้ไม่ได้อยู่ที่นี่
Christian.K

ซ้ำเป็นไปได้ของมีคำสั่งที่จะเปลี่ยนเส้นทางจากตำแหน่งปัจจุบันจะเริ่มต้นไดเรกทอรีในพรอมต์คำสั่งของ Windows หรือไม่? โดยเฉพาะดูคำตอบของฉันเพื่อทราบวิธีที่คุณสามารถให้มาโคร DOSKey ของคุณถูกโหลดอัตโนมัติเมื่อเปิดพร้อมท์คำสั่ง
Karan

ที่เกี่ยวข้อง + วิธีสร้าง doskey superuser
com/questions/49170/…

คำตอบ:


61

ดังที่ Christian.K กล่าวในความคิดเห็นของเขาคำสั่ง DOSKEY สามารถใช้เพื่อกำหนดมาโครซึ่งคล้ายกับนามแฝง

doskey macroName=macroDefinition

พารามิเตอร์มาโครถูกอ้างอิงในคำนิยามผ่าน$ตำแหน่งที่มีคำนำหน้า: $1ถึง$9และ$*สำหรับทั้งหมด

ดูเอกสารประกอบของdoskey technetหรือพิมพ์doskey /?หรือhelp doskeyจากบรรทัดคำสั่งสำหรับข้อมูลเพิ่มเติม

แต่มีข้อ จำกัด ร้ายแรงกับมาโคร DOSKEY:

  • มาโครใช้งานได้บนบรรทัดคำสั่งแบบโต้ตอบเท่านั้นซึ่งไม่สามารถทำงานได้ภายในสคริปต์ชุดงาน
  • ไม่สามารถใช้ได้ทั้งสองด้านของไปป์: ทั้งสองsomeMacro|findstr '^'และdir|someMacroล้มเหลว
  • ไม่สามารถใช้ภายในคำสั่ง FOR / F: for /f %A in ('someMacro') do ...ล้มเหลว

ข้อ จำกัด รุนแรงมากจนฉันแทบจะไม่ใช้มาโคร DOSKEY

เห็นได้ชัดว่าคุณสามารถสร้างชุดสคริปต์แทนที่จะเป็นมาโครและตรวจสอบให้แน่ใจว่าที่ตั้งสคริปต์อยู่ในเส้นทางของคุณ แต่คุณต้องนำหน้าแต่ละสคริปต์ด้วย CALL หากคุณต้องการใช้สคริปต์ภายในสคริปต์อื่น

คุณสามารถสร้าง "แมโคร" แบบแปรผันได้สำหรับคำสั่งที่ใช้มานานและบ่อยครั้ง แต่ไวยากรณ์นั้นค่อนข้างน่าอึดอัดใจในการพิมพ์เนื่องจากคุณจำเป็นต้องขยาย "แมโคร" เมื่อคุณต้องการใช้งาน

ความหมาย:

set "cdMe=cd a_very_long_path"

การใช้งาน (จากบรรทัดคำสั่งหรือสคริปต์)

%cdMe%

ขอบคุณแล้วมีวิธีการทำงานภายในชุดสคริปต์ใด ๆ
StarPinkER

@JermaineXu - ไม่มีทางกับมาโคร DOSKEY ดูคำตอบที่อัปเดตของฉันสำหรับทางเลือกที่หยาบ
dbenham

2
ข้อดีของโซลูชันที่สองคือการวางท่อจะทำงาน วิธีแก้ปัญหาแรกกับ doskey จะไม่ทำงานเมื่อคุณต้องการใช้แมโครในการไพพ์
ซีอีโอของ Apartico

ฉันจะวางมาโครนี้ไว้ในช่อง Win + R (กล่องโต้ตอบ Run) ได้อย่างไร
ZEE

@ZEE - คุณทำไม่ได้ แมโคร DOSKEY ต้องถูกคีย์ทางกายภาพลงในหน้าต่างคอนโซลที่ใช้งาน cmd.exe
dbenham

15

คุณสามารถสร้างชุดสคริปต์และบันทึกลงในเส้นทางของคุณ

บน Linux คุณจะสร้างสคริปต์และเพิ่มไปยังโฟลเดอร์~/binบน windows คุณสามารถทำเช่นเดียวกัน

เพิ่ม%USERPROFILE%\binให้กับPATHตัวแปรสภาพแวดล้อมของคุณ จากนั้นบันทึกสคริปต์ของคุณในนั้น

quickcd.cmd

@echo off
cd /d a_very_long_path

ตอนนี้คุณสามารถพิมพ์quickcdที่บรรทัดคำสั่ง

นอกจากนี้ยังสามารถเรียกใช้ภายในสคริปต์โดยใช้callฟังก์ชัน

call quickcd

สิ่งนี้ไม่ทำงาน - การตั้งค่าไดเรกทอรีภายในไฟล์แบตช์มีผลกับไฟล์แบตช์เท่านั้น เส้นทางจะย้อนกลับเมื่อออกจากไฟล์แบตช์
Shadow

1
มันใช้งานได้สำหรับฉัน Microsoft Windows [Version 10.0.17134.648]
William Bettridge-Radford

มันแปลกมาก ดังนั้นหากคุณคัดลอกและวางตัวอย่างข้างต้น (เปลี่ยนไดเรกทอรีเป็นที่มีอยู่) มันใช้งานได้สำหรับคุณ?
Shadow

โฟลเดอร์ของคุณอยู่ในไดรฟ์อื่นหรือไม่? คุณอาจต้องเพิ่ม/dธงในCD
William Bettridge-Radford

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คือมันสามารถทำงานได้ในทุกแบทช์โปรแกรมและจะปรากฏในกล่องโต้ตอบไฟล์ภายใน Windows

หากคุณไม่ต้องการแผนที่อีกต่อไป:

subst m: /D

3
ฉันก็ชอบสิ่งนี้ แต่มันกินตัวอักษรไดรฟ์
ggb667

8

คุณสามารถใช้เคล็ดลับแบบเดียวกันกับที่ windows ใช้: ตั้งค่าตัวแปรสภาพแวดล้อม (หรือเพียงแค่ตัวแปรในชุดบริบท) ตัวอย่างเช่นมีตัวแปรสภาพแวดล้อม% windir% (และอื่น ๆ ) เพื่อให้คุณสามารถทำ

cd C:\Windows\

หรือ

cd %windir%

ซึ่งทำเช่นเดียวกัน ดังนั้นคุณต้องทำคือ:

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

หลังจากนั้นคุณสามารถทำได้ (จากที่ใดก็ตามที่คุณอยู่):

dir %mydir%

หรือ

cd %mydir%

หรืออะไรก็ได้ที่คุณต้องการ


1
นั่นคือตั๋ว @stephan!
jbchurchill

3

ซึ่งแตกต่างจาก Linux ในนามแฝงของ Windows สามารถใช้อาร์กิวเมนต์และสามารถกำหนดพารามิเตอร์เพื่อกำหนดอาร์กิวเมนต์เหล่านั้นในคำจำกัดความของพวกเขา

คำสั่งในตัวคือdoskeyซึ่งหมายความว่าไม่ใช่ไฟล์เรียกทำงานภายนอกที่อยู่ใน%SystemRoot%\System32แต่เป็นคุณลักษณะcmd.exeที่ตัวมันเองอยู่ใน%SystemRoot%หรือ%Windir%ทั้งสองชี้ไปที่C:\Windowsโฟลเดอร์ตามค่าเริ่มต้น

Doskey กำหนดนามแฝงท่ามกลางสิ่งอื่น ๆ ในคำศัพท์เฉพาะของ 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.batและใส่ไว้ในโฟลเดอร์ใน PATH (เช่น 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 ด้วยตัวเองควรจะแสดงรายการของไดเรกทอรีที่คั่นไว้ ใช้งานได้ แต่ไม่แน่ใจว่าทำไมฉันถึงได้รับข้อความ "cd ที่ไม่คาดคิด" นี้

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 ปกติ

นอกเหนือจากการนำทางไดเรกทอรีคุณสามารถสร้างfoo.cmdบางแห่งบนเส้นทางของคุณและสามารถทำหน้าที่เป็นนามแฝงได้ โปรดจำไว้ว่าไม่เหมือนเปลือกหอย Linux / OSX, ไฟล์คำสั่งจะมีผลต่อตัวแปรสภาพแวดล้อมและเซสชั่นโดยไม่จำเป็นต้องมาให้พวกเขา

ฉันมีcdbin.cmdเพื่อนำทางฉันเช่น:

d:
cd \home\bin

และนี่คือgrep.cmd หลอก

findstr -n %1 %2

กำลังดำเนินการ

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จะเปิดNotepadแต่ถ้าเราพิมพ์npd test.txtก็จะเปิดtest.txtในNotepad

คุณสามารถใช้ $ * สำหรับพารามิเตอร์ทั้งหมดนี่คืออีกตัวอย่าง:

doskey prt=echo $*

และถ้าคุณพิมพ์prt This is short.ผลลัพธ์จะเป็น:

อันนี้สั้น

คุณสามารถใช้ $ T สำหรับคำสั่งหลายคำสั่งได้ตัวอย่าง:

doskey newline=echo $1 $T echo $2

และถ้าคุณพิมพ์newline Hello andผลลัพธ์จะเป็น:

สวัสดี

และ

ฉันหวังว่าคุณเข้าใจ.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.