如何在Windows命令行中设置别名?


66

我曾经从事bash的工作,并从别名中受益匪浅。Windows命令行中是否有任何等效方法?

我不想模拟Linux环境,因此cygwin不是一个选择。我只需要一些非常长的命令的快捷方式,例如cd a_very_long_path


5
您将使用doskey(不要被它不是旧的MS DOS doskey的名称所欺骗)。使用doskey /?以获取更多信息。除此之外,恐怕这个问题不在这里了。
Christian.K

Windows的命令提示符是否存在命令将路径从当前位置更改为默认目录的可能重复项具体来说,请参阅我的答案以了解如何在打开命令提示符时如何自动加载DOSKey宏。
卡兰(Karan)2013年

有关+一个方法,使DOSKEY永久superuser.com/questions/49170/...
laggingreflex

Answers:


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宏。

显然,您可以创建批处理脚本而不是宏,并确保脚本位置在PATH中。但是,如果要在另一个脚本中使用该脚本,则必须在每个脚本前添加CALL前缀。

您可以为经常使用的命令创建简单的变量“ macros”,但是键入语法有点尴尬,因为在使用“ macro”时需要对其进行扩展。

定义:

set "cdMe=cd a_very_long_path"

用法(从命令行或脚本)

%cdMe%

谢谢,那么有什么办法可以在批处理脚本中工作?
StarPinkER 2013年

@JermaineXu-无法使用DOSKEY宏。请参阅我最新的答案以获取粗略的替代方案。
dbenham

2
第二种解决方案的优点是,管道可以正常工作。当您要在管道中使用宏时,使用doskey的第一个解决方案将无法工作。
Apartico 2014年

如何将这些宏显示在Win + R框(“运行”对话框)中
ZEE

@ZEE-不能。DOSKEY宏必须物理地键入到运行cmd.exe的控制台窗口中。
dbenham

15

您可以制作一个批处理脚本并将其保存到路径中。

在Linux上,您可以创建一个脚本并将其添加到~/binWindows 上的文件夹中,您可以执行相同操作。

添加%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]
威廉·贝特里奇-拉德福德

真的很奇怪 因此,如果您复制并粘贴以上示例(将目录更改为现有目录),它对您有用吗?
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 2014年

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工艺(又称和命令提示符),他们走了。

要拥有永久别名,您可以在名为AutoRun或AutoCommand或类似名称的regedit键中的某个位置键入完整命令,我现在无法回忆起宏文件的内部语法: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批次

除了目录导航之外,您还可以在PATH的某处创建foo.cmd,它可以充当别名。请记住,不同的Linux / 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,将在notepad中打开test.txt

您可以对所有参数使用$ *,这是另一个示例:

doskey prt=echo $*

如果输入prt This is short.,输出将是:

这很短。

您可以对多个命令使用$ T,这是一个示例:

doskey newline=echo $1 $T echo $2

如果输入newline Hello and,输出将是:

你好

我希望你明白。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.