Làm cách nào để đặt bí danh trong Windows Command Line?


60

Tôi đã từng làm việc trên bash và được hưởng lợi rất nhiều từ bí danh. Có cách nào tương đương trong Windows Command Line không?

Tôi không muốn mô phỏng môi trường Linux, vì vậy cygwin không phải là một lựa chọn. Tôi chỉ cần một số phím tắt cho một số lệnh rất dài, như cd a_very_long_path.


5
Bạn sẽ sử dụng doskey (đừng để bị lừa bởi cái tên nó không phải là MSkey doskey cũ). Sử dụng doskey /? để biết thêm thông tin. Ngoài ra, tôi e rằng, câu hỏi này không có chủ đề ở đây.
Christian.K

Nhận xét tuyệt vời, cảm ơn. @ Christian.K
StarPinkER

Có thể trùng lặp Có lệnh thay đổi đường dẫn từ vị trí hiện tại sang thư mục mặc định, trong dấu nhắc lệnh của Windows không? Cụ thể, xem câu trả lời của tôi để biết làm thế nào bạn có thể tải macro DOSKey của mình khi Dấu nhắc lệnh được mở.
Karan

liên quan + một cách để làm cho doskey vĩnh viễn superuser.com/questions/49170/ trộm
laggingreflex

Câu trả lời:


53

Như Christian.K đã nói trong nhận xét của mình, lệnh DOSKEY có thể được sử dụng để xác định các macro, tương tự như các bí danh.

doskey macroName=macroDefinition

Các tham số macro được tham chiếu trong định nghĩa thông qua $ vị trí tiền tố: $1 xuyên qua $9$* cho tất cả.

Xem tài liệu kỹ thuật doskey hoặc loại doskey /? hoặc là help doskey từ dòng lệnh để biết thêm thông tin.

Nhưng có những hạn chế nghiêm trọng với macro DOSKEY:

  • Các macro chỉ hoạt động trên dòng lệnh tương tác - chúng không hoạt động trong một tập lệnh bó.
  • Chúng không thể được sử dụng ở hai bên của đường ống: Cả hai someMacro|findstr '^'dir|someMacro Thất bại.
  • Chúng không thể được sử dụng trong các lệnh FOR / F: for /f %A in ('someMacro') do ... thất bại

Những hạn chế nghiêm trọng đến mức tôi hiếm khi sử dụng macro DOSKEY.

Rõ ràng bạn có thể tạo các tập lệnh bó thay vì macro và đảm bảo các vị trí tập lệnh nằm trong PATH của bạn. Nhưng sau đó, bạn phải thêm tiền tố vào mỗi tập lệnh bằng CALL nếu bạn muốn sử dụng tập lệnh trong tập lệnh khác.

Bạn có thể tạo các "macro" biến đơn giản cho các lệnh dài và thường được sử dụng, nhưng cú pháp hơi khó gõ, vì bạn cần mở rộng "macro" khi bạn muốn sử dụng nó.

Định nghĩa:

set "cdMe=cd a_very_long_path"

Cách sử dụng (từ dòng lệnh hoặc tập lệnh)

%cdMe%

Cảm ơn, sau đó có cách nào để làm việc trong một tập lệnh bó không?
StarPinkER

@JermaineXu - Không có cách nào với các macro DOSKEY. Xem câu trả lời cập nhật của tôi cho các lựa chọn thay thế thô.
dbenham

2
Các pro của giải pháp thứ hai là, đường ống sẽ hoạt động. Giải pháp đầu tiên với doskey sẽ không hoạt động khi bạn muốn sử dụng macro trong đường ống.
CEO at Apartico

@UnhandledException - Bạn nói đúng! Tôi chưa bao giờ nghĩ rằng để kiểm tra rằng vì thiếu hỗ trợ hàng loạt là đủ để tôi tránh các macro DOSKEY. Chúng cũng không thể được sử dụng như một lệnh trong mệnh đề FOR ​​/ F IN ().
dbenham

1
@UnhandledException - Tôi đã cập nhật câu trả lời của mình để bao gồm thông tin của bạn. Cảm ơn.
dbenham

12

Bạn có thể tạo một tập lệnh bó và lưu nó vào đường dẫn của bạn.

Trên Linux, bạn sẽ tạo một tập lệnh và thêm nó vào thư mục ~/bin trên cửa sổ bạn có thể làm tương tự.

Thêm vào %USERPROFILE%\bin cho bạn PATH biến môi trường. Sau đó lưu tập lệnh của bạn trong đó.

quickcd.cmd

@echo off
cd a_very_long_path

Bây giờ bạn có thể gõ quickcd tại dòng lệnh.

Nó cũng có thể được gọi bên trong một tập lệnh bằng cách sử dụng call chức năng

call quickcd

11

SUBST

Nếu bạn đang thực sự cố gắng để có được một cái gì đó như thế này:

c: cd \ users \ myLoginID \ Documents \ client \ MTV \ Strateg \ roadmap \ deliverable \ Final

bạn có thể sử dụng lệnh trạm biến để ánh xạ đường dẫn dài đó đến một ký tự ổ đĩa riêng

trạm biến áp: c: \ users \ myLoginID \ Documents \ client \ MTV \ Strateg \ roadmap \ deliverable \ Final

Sau đó, khi bạn muốn nhảy vào thư mục đó, bạn có thể chỉ cần gõ m: tại dòng lệnh.

Ưu điểm của doskey này là nó hoạt động trong tất cả các chương trình hàng loạt và hiển thị trong bất kỳ hộp thoại tệp nào trong Windows.

Nếu bạn không muốn lập bản đồ nữa:

trạm biến áp: / D


Nếu tôi có thể bầu cho bạn nhiều hơn một ... :) giải pháp hoàn hảo ...
Anindya Chatterjee

2
Tôi cũng thích điều này nhưng nó không ăn chữ.
ggb667

8

Bạn có thể sử dụng cùng một thủ thuật mà windows sử dụng: đặt biến môi trường (hoặc chỉ một biến trong ngữ cảnh bó) ví dụ: có một biến môi trường% Windir% (và một số khác) Vì vậy, bạn có thể làm một

cd C:\Windows\

hoặc là

cd %windir%

mà làm như vậy. Vì vậy, tất cả, bạn phải làm là:

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

sau đó bạn có thể làm (từ bất cứ nơi nào bạn đang có):

dir %mydir%

hoặc là

cd %mydir%

hoặc bất cứ điều gì bạn muốn.


1
Đó là vé @stephan!
jbchurchill

1

Tôi đã tạo một "bí danh" như thế đặc biệt để thay đổi thư mục. Về cơ bản tôi đã tạo một tập tin có tên fav.bat và đặt nó vào một thư mục trong PATH (ví dụ: 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

Sau đó tôi có thể chuyển đến bất kỳ thư mục được xác định trước rất nhanh. Tôi đã viết một bài báo đầy đủ về kỹ thuật đó đây .


1

Không giống như Linux, trong các bí danh của Windows có thể lấy các đối số và có thể được cung cấp các tham số để gán các đối số đó theo định nghĩa của chúng.

Lệnh tích hợp bên trong là liều , có nghĩa là nó không phải là một tập tin thực thi bên ngoài nằm trong %SystemRoot%\System32 nhưng là một tính năng của cmd.exe mà chính nó nằm ở %SystemRoot% hoặc là %Windir% cả hai chỉ vào C:\Windows thư mục theo mặc định.

Doskey định nghĩa bí danh trong số nhiều thứ khác. Trong thuật ngữ Windows, bí danh được gọi là macro. Để đặt bí danh bạn sử dụng

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

Đây $1 chỉ ra đối số đầu tiên và $* chỉ vào tất cả các đối số.

Tôi luôn luôn sử dụng $* và trích dẫn kép $1 nếu chỉ có một đối số để bỏ qua khoảng trắng được coi là ký tự đặc biệt, cụ thể là dấu phân cách (đối với lệnh).

Hơn nữa, bạn có thể xác định bí danh macro trong một tệp riêng biệt LinuxAliases.macro và sau đó nguồn nó bằng cách sử dụng

doskey /macrofile=LinuxAliases.macro

Nó sẽ tải tất cả các bí danh được xác định bên trong tệp cho hiện tại phiên chỉ, có nghĩa là khi bạn exit ra khỏi cmd.exe quá trình (còn được gọi là vỏ và Command Prompt), họ đã biến mất.

Để có bí danh vĩnh viễn, bạn có thể nhập lệnh đầy đủ ở đâu đó trong khóa regedit có tên là AutoRun hoặc AutoCommand hoặc một cái gì đó tương tự, bây giờ tôi không thể nhớ lại cùng với cú pháp bên trong của tệp macro: P


Sau đây là chính thức , và ngay cả tốt hơn tài liệu cho lệnh.


0

giả sử bạn vẫn ở trên cùng một ổ đĩa, tức là không D: sau đó cd D:\somedir\ cần thiết

Trong trường hợp của tôi, C: giữ các tệp hệ thống, nhưng tất cả các công việc được bật Đ:

2 phần. đầu tiên thiết lập một số thư mục làm việc, sử dụng một tệp bó.

hãy cùng nói nào localprofile.cmd . Bạn có thể có nhiều cái trong số này, chỉ cần chạy chúng khi cần thiết.

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

bây giờ sử dụng một tệp lệnh khác để di chuyển xung quanh, dựa trên các biến môi trường mà bạn vừa đặt.

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%

Và một chút sử dụng mẫu:

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 tự nó được cho là để hiển thị cho tôi danh sách các thư mục được đánh dấu. Nó hoạt động, nhưng không chắc tại sao tôi nhận được thông báo "cd bất ngờ" này.

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> 

Lô .cmd thông thường

Ngoài điều hướng thư mục, bạn có thể tạo một foo.cmd ở đâu đó trên PATH của bạn và nó có thể hoạt động như một bí danh. Hãy nhớ rằng, không giống như shell Linux / OSX, các tệp cmd có thể ảnh hưởng đến các biến môi trường và phiên, mà không cần phải nguồn họ

tôi có một cdbin.cmd để điều hướng tôi, ví dụ:

d:
cd \home\bin

Và đây là một giả grep.cmd

findstr -n %1 %2

trong hành động (bất kể sắp xếp / + 2 / + 10 có nghĩa là gì)

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.