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

Sta*_*kER 102 windows command-line

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

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

dbe*_*ham 98

正如 Christian.K 在他的评论中所说,DOSKEY 命令可用于定义类似于别名的宏。

doskey macroName=macroDefinition
Run Code Online (Sandbox Code Playgroud)

宏参数在定义中通过$前缀位置引用:$1通过$9$*为所有。

请参阅doskey technet 文档,或从命令行键入doskey /?help doskey以获取更多信息。

但是 DOSKEY 宏存在严重的限制:

  • 宏仅适用于交互式命令行 - 它们不适用于批处理脚本。
  • 他们不能在管道的任何一侧:两个someMacro|findstr '^'dir|someMacro失败。
  • 它们不能在 FOR /F 命令中使用:for /f %A in ('someMacro') do ...失败

这些限制非常严重,以至于我很少使用 DOSKEY 宏。

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

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

定义:

set "cdMe=cd a_very_long_path"
Run Code Online (Sandbox Code Playgroud)

用法(来自命令行或脚本)

%cdMe%
Run Code Online (Sandbox Code Playgroud)

  • 第二种解决方案的优点是,管道将起作用。当您想在管道中使用宏时,使用 doskey 的第一个解决方案将不起作用。 (2认同)

Wil*_*ord 25

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

在 Linux 上,您可以制作一个脚本并将其添加到~/binWindows上的文件夹中,您也可以这样做。

添加%USERPROFILE%\bin到您的PATH环境变量。然后将您的脚本保存在那里。

quickcd.cmd

@echo off
cd /d a_very_long_path
Run Code Online (Sandbox Code Playgroud)

现在您可以quickcd在命令行输入。

也可以使用call函数在脚本内部调用它

call quickcd
Run Code Online (Sandbox Code Playgroud)

  • 它对我有用。`Microsoft Windows [版本 10.0.17134.648]` (2认同)

小智 19

subst

如果你真的想绕过这样的事情:

C:> cd \users\myLoginID\documents\clients\MTV\strategy\roadmap\deliverable\final
Run Code Online (Sandbox Code Playgroud)

您可以使用该subst命令将该长路径映射到单独的驱动器号

subst m: c:\users\myLoginID\documents\clients\MTV\strategy\roadmap\deliverable\final
Run Code Online (Sandbox Code Playgroud)

然后,当您想跳转到该文件夹​​时,只需m:在命令行中输入即可。

这样做的优点doskey是它适用于所有批处理程序,并显示在 Windows 中的任何文件对话框中。

如果您不再需要映射:

subst m: /D
Run Code Online (Sandbox Code Playgroud)

  • 我也喜欢这个,但它确实吃掉了驱动器号。 (5认同)

小智 10

您可以使用 windows 使用的相同技巧:设置环境变量(或只是批处理上下文中的变量),例如有一个环境变量 %windir%(和其他一些)所以你可以做一个

cd C:\Windows\
Run Code Online (Sandbox Code Playgroud)

或者

cd %windir%
Run Code Online (Sandbox Code Playgroud)

做同样的事情。所以,你所要做的就是:

set "mydir=C:\very\long\path\to\my\data\"
Run Code Online (Sandbox Code Playgroud)

之后,您可以执行以下操作(无论您身在何处):

dir %mydir%
Run Code Online (Sandbox Code Playgroud)

或者

cd %mydir%
Run Code Online (Sandbox Code Playgroud)

或任何你想要的。


小智 10

与 Linux 不同,在 Windows 中别名可以接受参数,并且可以给定参数以将这些参数分配到它们的定义中。

内部内置命令是doskey,这意味着它不是位于的外部可执行文件,%SystemRoot%\System32而是默认情况下cmd.exe其本身位于%SystemRoot%%Windir%两者都指向C:\Windows文件夹的功能。

Doskey 定义了许多其他的别名。在 Windows 术语中,别名称为宏。设置您使用的别名

doskey alias=command $1 $2 ... $9 or $* (to catch them all) 
Run Code Online (Sandbox Code Playgroud)

这里$1指向第一个参数,并$*指向所有参数。

如果只有一个参数可以省略被视为特殊字符的空格,即作为分隔符(用于命令),我总是使用$*双引号$1

此外,您可以在单独的文件中定义别名宏,例如LinuxAliases.macro,然后使用

doskey /macrofile=LinuxAliases.macro
Run Code Online (Sandbox Code Playgroud)

它将仅为当前会话加载文件中定义的所有别名,这意味着当您exit退出cmd.exe进程(也称为shell和命令提示符)时,它们就消失了。

要获得永久别名,您可以在名为 AutoRun 或 AutoCommand 或类似名称的注册表编辑器键中的某处键入完整命令,我现在无法在宏文件的内部语法旁边回忆起来:P


这是该命令的官方文档,甚至更好的文档。


小智 8

您可以使用doskey.exe,这是一个示例:

doskey qcd=cd [pathname]
Run Code Online (Sandbox Code Playgroud)

现在,如果您键入qcd,它将cd到该路径。

以下是有关doskey宏的一些帮助:

doskey [macroname]=[command]
Run Code Online (Sandbox Code Playgroud)

这是最简单的形式,下面是一个例子:

doskey word=echo This is a really, really long sentence.
Run Code Online (Sandbox Code Playgroud)

如果您输入word输出为:

这真是一个非常非常长的句子。

您可以使用 $1-$9 作为参数,下面是一个示例:

doskey npd=notepad $1
Run Code Online (Sandbox Code Playgroud)

如果您输入npd它将打开记事本,但如果我们输入npd test.txt它将在记事本中打开test.txt

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

doskey prt=echo $*
Run Code Online (Sandbox Code Playgroud)

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

这很短。

您可以将 $T 用于多个命令,下面是一个示例:

doskey newline=echo $1 $T echo $2
Run Code Online (Sandbox Code Playgroud)

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

你好

我希望你明白。