Windows命令提示符中的别名

Rom*_*nov 320 windows alias command-prompt

notepad++.exe在环境变量中添加了我的Path.

现在在命令提示符下,notepad++.exe filename.txt打开filename.txt.但我想np filename.txt打开文件.

我试过用DOSKEY np=notepad++.但它只是在没有打开文件的情况下将已经打开的记事本++带到最前面.如何让它打开文件?

谢谢.

Arg*_*yll 380

添加到乔希的答案,

您可以通过以下步骤使别名持久化,

  1. 使用DOSKEY命令创建.bat或.cmd文件.
  2. 运行regedit然后转到 HKEY_CURRENT_USER\Software\Microsoft\Command Processor
  3. 使用.bat/.cmd文件的名称AutoRun完整路径添加字符串值条目.

    例如,%USERPROFILE%\alias.cmd替换路径的初始段%USERPROFILE%对于在多台机器之间进行同步很有用.

这样,每次运行cmd时,都会加载别名.

为了完整起见,这里有一个模板来说明可能会发现有用的别名类型.

@echo off

:: Temporary system path at cmd startup

set PATH=%PATH%;"C:\Program Files\Sublime Text 2\"

:: Add to path by command

DOSKEY add_python26=set PATH=%PATH%;"C:\Python26\"
DOSKEY add_python33=set PATH=%PATH%;"C:\Python33\"

:: Commands

DOSKEY ls=dir /B
DOSKEY sublime=sublime_text $*  
    ::sublime_text.exe is name of the executable. By adding a temporary entry to system path, we don't have to write the whole directory anymore.
DOSKEY gsp="C:\Program Files (x86)\Sketchpad5\GSP505en.exe"
DOSKEY alias=notepad %USERPROFILE%\Dropbox\alias.cmd

:: Common directories

DOSKEY dropbox=cd "%USERPROFILE%\Dropbox\$*"
DOSKEY research=cd %USERPROFILE%\Dropbox\Research\
Run Code Online (Sandbox Code Playgroud)
  • 请注意,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor语法在目录字符串之后以及接收参数的可执行文件中起作用.因此在上面的示例中,用户定义的命令$*指向与之相同的目录dropbox research.
  • 正如Rivenfall指出的那样,包含一个允许方便编辑research文件的命令是个好主意.见alias.cmd上文.如果您在cmd会话中,请输入alias以重新启动cmd并重新加载该cmd文件.

当我在互联网上搜索问题的答案时,不知怎的讨论只关注持久性或仅关注DOSKEY的一些用法.我希望有人能从这两个方面一起受益!


这是一个alias.cmd帮助您安装的文件.reg.现在将其设置为如上所述的Dropbox文件夹的示例.

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"AutoRun"="%USERPROFILE%\\alias.cmd"
Run Code Online (Sandbox Code Playgroud)

  • 这是天真和低效的.将为每个cmd.exe实例运行自动运行批处理文件,包括`system`函数.如果定义了某个变量(例如`AUTORUN`),则需要退出.否则设置环境(`set AUTORUN = 1`)并使用macrofile选项一次性设置doskey,而不是运行doskey.exe来定义每个别名. (8认同)
  • @eryksun你可以发布或链接到一个不太天真的例子吗?我知道如果定义了自动运行怎么退出,但是如果在没有运行CMD的情况下首先如何设置或取消设置它会感到困惑. (4认同)
  • 我喜欢这个。类似的选项是放入自动运行:`doskey /macrofile="%USERPROFILE%\alias"`。接下来将别名放入“alias”文件中,不包含“doskey”部分。管理员可以使用该解决方案将自动运行定义限制为用户可以自行创建的别名。防止用户自动运行其他东西。 (4认同)
  • 正是我需要的; 完美的; 我建议添加一个doskey来实际编辑env.cmd文件 (2认同)
  • 目前,“ HKEY_CURRENT_USER \ Software \ Microsoft \ Command Processor”的替代品是什么?我似乎再也无法在regedit中找到该路径 (2认同)
  • @Jan 对我来说,它位于“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor”中。我使用注册表编辑器中的“编辑”->“查找”功能来查找它。 (2认同)
  • 我刚买了一台装有 win 10 的新电脑。“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor”适合我。 (2认同)
  • 请注意,此解决方案可能会导致出现问题(我使用自动化工具进行的构建奇怪地失败了,似乎根本没有原因)。最好有一个全局可访问的“bat”文件,仅在定义时调用“%USERPROFILE%\alias.cmd”。例如... `IF EXIST "%USERPROFILE%\alias.cmd" ( CALL "%USERPROFILE%\alias.cmd")` 这应该可以防止子命令提示中不存在的配置错误的“泄漏”(node、maven、 ...) (2认同)

jos*_*ley 233

你需要传递参数,试试这个:

doskey np=notepad++.exe $*
Run Code Online (Sandbox Code Playgroud)

编辑(回应Romonov的评论)问:有没有办法让命令提示符记住,所以每次打开新的命令提示符时都不必运行它?

doskey 是一个由命令处理器(例如cmd.exe)解释的文本命令,它无法知道在某些其他进程中修改状态(尤其是尚未启动的进程).

使用的人doskey设置的初始命令外壳环境下通常使用的/K选项(通常是通过一个快捷键)来运行一个批处理文件,它完成了所有的常用的设置(喜欢-集窗口的标题,颜色等).

cmd.exe /K env.cmd
Run Code Online (Sandbox Code Playgroud)

env.cmd:

title "Foo Bar"
doskey np=notepad++.exe $*
...
Run Code Online (Sandbox Code Playgroud)

  • 这适用于我运行此命令的命令提示符.但是,如果我关闭窗口并打开一个新的命令提示符.它不记得np命令.有没有什么方法可以让命令提示符记住,所以每次打开一个新的命令提示符时我都不必运行它? (7认同)
  • 不改变PATH的相同行为:`doskey npp ="C:\ Program Files(x86)\ Notepad ++ \notepad ++.exe"$*` (5认同)
  • doskey.exe与cmd.exe无关.它为控制台窗口中的当前或指定可执行文件设置别名,该窗口由conhost.exe实例托管.在客户端应用程序(例如cmd.exe或powershell.exe)读取行之前,控制台别名在输入行的开头匹配并替换.它们不能一般用作命令,例如不能用于批处理文件或管道传输. (4认同)

ror*_*itt 99

如果你只是想要一些简单的命令,你可以按照以下步骤操作:

  1. 创建一个名为C:\ Aliases的文件夹
  2. C:\ Aliases添加到您的路径中(因此每次都会找到其中的所有文件)
  3. 在C:\ Aliases中为所需的每个别名创建一个.bat文件

也许是矫枉过正,但与@Argyll的(其他优秀)答案不同,这解决了每次加载的问题.

例如,我有一个名为dig2.bat的文件,其中包含以下内容:

@echo off
echo.
dig +noall +answer %1
Run Code Online (Sandbox Code Playgroud)

你的np文件只有以下内容:

@echo off
echo.
notepad++.exe %1
Run Code Online (Sandbox Code Playgroud)

FWIW,我在C:\ Aliases目录中有大约20个别名(单独的.bat文件) - 我只是根据需要创建新的别名.也许不是最好的,但它工作正常.

更新:根据用户@Mav的优秀建议,使用%*而不是%1更好,因此您可以将多个文件传递给命令,例如:

@echo off
echo.
notepad++.exe %*
Run Code Online (Sandbox Code Playgroud)

这样,你可以这样做:

np c:\temp\abc.txt c:\temp\def.txt c:\temp\ghi.txt
Run Code Online (Sandbox Code Playgroud)

它将打开所有3个文件.

  • 我个人确实使用这种方法很长一段时间.如果有人不想继续使用`doskey`,这就是一种非常容易实现的方法. (4认同)
  • 此方法(cmd文件作为别名)的一个优点是,如果您使用WSL(适用于Windows的Linux子系统),这些cmd也可以在bash中使用.虽然经常(取决于你的别名)你需要在调用cmd文件之前使用wslpath.sh或类似的方法进行一些路径操作 (4认同)
  • 可能想要添加%*而不是%1来传递所有参数而不是第一个. (3认同)
  • “回声”有什么用? (2认同)

Nis*_*hth 32

或者您也可以使用cmder它来添加像linux一样的别名:

alias subl="C:\Program Files\Sublime Text 3\subl.exe" $*
Run Code Online (Sandbox Code Playgroud)

  • 虽然这不能回答这个问题.对于Linux背景的人来说,了解Windows CMD可以替代其直接需求非常重要. (8认同)
  • 有很多替代方案。Windows 版 Git 附带了一个“git-bash”。 (2认同)

Vel*_*ixo 29

鉴于您在PATH变量中添加了notepad ++.exe,它更加简单.np.bat使用以下代码在System32文件夹中创建一个文件:

@echo off
call notepad++.exe %*
Run Code Online (Sandbox Code Playgroud)

%*通行证沿所有参数你给的np命令的notepad++.exe命令.

编辑: 您将需要管理员权限将文件保存到System32文件夹,这对我来说有点不对劲.我刚刚在其他地方创建了文件并手动将其移动到System32.


Ник*_*хно 14

此外,您可以使用该命令在路径中创建alias.cmd(例如C:\ Windows)

@echo %2 %3 %4 %5 %6 > %windir%\%1.cmd
Run Code Online (Sandbox Code Playgroud)

一旦你这样做,你可以做这样的事情:

alias nameOfYourAlias commands to run 
Run Code Online (Sandbox Code Playgroud)

然后你可以输入comman line

nameOfYourAlias 
Run Code Online (Sandbox Code Playgroud)

这将执行

commands to run 
Run Code Online (Sandbox Code Playgroud)

但对我来说最好的方法就是添加程序的路径.

setx PATH "%PATH%;%ProgramFiles%\Sublime Text 3" /M 
Run Code Online (Sandbox Code Playgroud)

现在我以崇高的方式运行

subl index.html
Run Code Online (Sandbox Code Playgroud)


Qwe*_*rty 13

当然,在找到最方便的解决方案之前我不会休息。结合广阔的互联网上的众多答案和主题,您可以获得以下内容。

\n
    \n
  • 随每个实例自动加载cmd
  • \n
  • DOSKEY别名不需要关键字
    \n示例:ls=ls --color=auto $*
  • \n
\n

请注意,这很大程度上基于阿盖尔的回答和评论,一定要阅读它以理解概念。

\n

cmd 问候语和别名

\n

如何让它发挥作用?

\n
    \n
  1. mac使用别名创建一个宏文件
    \n你甚至可以使用bat/cmd文件来运行其他东西(类似于.bashrc在 Linux 中)
  2. \n
  3. cmd
    在注册表中注册它以在\n\xc2\xa0\xc2\xa0的每个实例上运行,或者仅在需要时通过快捷方式运行它
  4. \n
\n

步骤示例:

\n

%userprofile%/cmd/aliases.mac

\n
;==============================================================================\n;= This file is registered via registry to auto load with each instance of cmd.\n;================================ general info ================================\n;= /sf/answers/4198471441/  -  how to set it up?\n;= https://gist.github.com/postcog/5c8c13f7f66330b493b8  -  example doskey macrofile\n;========================= loading with cmd shortcut ==========================\n;= create a shortcut with the following target :\n;= %comspec% /k "(doskey /macrofile=%userprofile%\\cmd\\aliases.mac)"\n\nalias=echo Opening aliases in Sublime... && subl %USERPROFILE%\\cmd\\aliases.mac\nga=grep --color "$1" %USERPROFILE%\\cmd\\aliases.mac\n\nhosts=runas /noprofile /savecred /user:QWERTY-XPS9370\\administrator "subl C:\\Windows\\System32\\drivers\\etc\\hosts" > NUL\n\np=@echo "~~ powercfg -devicequery wake_armed ~~" && powercfg -devicequery wake_armed && @echo "~~ powercfg -requests ~~ " && powercfg -requests && @echo "~~ powercfg -waketimers ~~"p && powercfg -waketimers\n\nls=ls --color=auto $*\nll=ls -l --color=auto $*\nla=ls -la --color=auto $*\ngrep=grep --color $*\n\n~=cd %USERPROFILE%\ncdr=cd C:\\repos\ncde=cd C:\\repos\\esquire\ncdd=cd C:\\repos\\dixons\ncds=cd C:\\repos\\stekkie\ncdu=cd C:\\repos\\uplus\ncduo=cd C:\\repos\\uplus\\oxbridge-fe\ncdus=cd C:\\repos\\uplus\\stratus\n\nnpx=npx --no-install $*\nnpxi=npx $*\nnpr=npm run $*\n\nnow=vercel $*\n\n\n;=only in bash\n;=alias whereget=\'_whereget() { A=$1; B=$2; shift 2; eval \\"$(where $B | head -$A | tail -1)\\" $@; }; _whereget\'\n\nhistory=doskey /history\nh=IF ".$*." == ".." (echo "usage: h [ SAVE | TAIL [-|+<n>] | OPEN ]" && echo. &&\xc2\xa0doskey/history) ELSE (IF /I "$1" == "OPEN" (%USERPROFILE%\\cmd\\history.log) ELSE (IF /I "$1" == "SAVE" (echo **** %date% %time% **** >> %USERPROFILE%\\cmd\\history.log & doskey/history >> %USERPROFILE%\\cmd\\history.log & ECHO Command history saved) ELSE (IF /I "$1" == "TAIL" (tail $2 %USERPROFILE%\\cmd\\history.log) ELSE (doskey/history))))\n\n;=exit=echo **** %date% %time% **** >> %USERPROFILE%\\cmd\\history.log & doskey/history >> %USERPROFILE%\\cmd\\history.log & ECHO Command history saved, exiting & timeout 1 & exit $*\nexit=echo **** %date% %time% **** >> %USERPROFILE%\\cmd\\history.log & doskey/history >> %USERPROFILE%\\cmd\\history.log & exit $*\n\n;============================= :end ============================\n;= rem ******************************************************************\n;= rem * EOF - Don\'t remove the following line.  It clears out the \';\'\n;= rem * macro. We\'re using it because there is no support for comments\n;= rem * in a DOSKEY macro file.\n;= rem ******************************************************************\n;=\n
Run Code Online (Sandbox Code Playgroud)\n

现在您有三个选择:

\n
    \n
  • a) 使用快捷方式手动加载

    \n
    \n

    cmd.exe创建具有以下目标的快捷方式:
    \n%comspec% /k "(doskey /macrofile=%userprofile%\\cmd\\aliases.mac)"

    \n
    \n
  • \n
  • b) 仅注册aliases.mac宏文件

    \n
  • \n
  • c) 注册一个常规cmd/bat文件来运行任意命令(类似于 linux 的.bashrc
    \n请参阅底部的示例文件cmdrc.cmd

    \n
  • \n
\n

注意:下面Autorun_只是一个占位符键,不会执行任何操作。选择一个并重命名另一个。

\n

在此路径手动编辑注册表:

\n

[HKEY_CURRENT_USER\\Software\\Microsoft\\Command Processor]

\n
  Autorun    REG_SZ    doskey /macrofile=%userprofile%\\cmd\\aliases.mac\n  Autorun_    REG_SZ    %USERPROFILE%\\cmd\\cmdrc.cmd\n
Run Code Online (Sandbox Code Playgroud)\n

或者导入reg文件:

\n

%userprofile%/cmd/cmd-aliases.reg

\n
Windows Registry Editor Version 5.00\n[HKEY_CURRENT_USER\\Software\\Microsoft\\Command Processor]\n"Autorun"="doskey /macrofile=%userprofile%\\\\cmd\\\\aliases.mac"\n"Autorun_"="%USERPROFILE%\\\\cmd\\\\cmdrc.cmd"\n
Run Code Online (Sandbox Code Playgroud)\n

%userprofile%/cmd/cmdrc.cmd 如果您决定使用上面的 b),则不需要此文件

\n
:: This file is registered via registry to auto load with each instance of cmd.\n:: /sf/answers/4198471441/\n\n@echo off\ndoskey /macrofile=%userprofile%\\cmd\\aliases.mac\n\n:: put other commands here\n\ncls\necho Hi Qwerty, how are you today?\n
Run Code Online (Sandbox Code Playgroud)\n

cmd 问候语和别名

\n


Qwe*_*rty 9

Windows 10中的控制台别名

要定义控制台别名,请使用Doskey.exe创建宏或使用该AddConsoleAlias功能.

DOSKEY

doskey test=cd \a_very_long_path\test
Run Code Online (Sandbox Code Playgroud)

要在最后传递参数 add $*:doskey short=longname $*

AddConsoleAlias

AddConsoleAlias( TEXT("test"), 
                 TEXT("cd \\<a_very_long_path>\\test"), 
                 TEXT("cmd.exe"));
Run Code Online (Sandbox Code Playgroud)

更多信息控制台别名,Doskey,参数


Dav*_*vid 6

实际上,我会让您更好,让您了解自从我以前在Amiga上编程以来一直使用的一些技巧。在您使用的任何新系统上,无论是个人系统还是专业系统,第一步都是创建两个文件夹: C:\BINC:\BATCH。然后修改您的path语句,以将两者放在顺序的开头C:\BATCH;C:\BIN;[rest of path]

完成此操作后,如果您只有很少的偏僻实用程序,则只需将它们复制到C:\BIN文件夹中就可以访问它们,并且它们就在您的路径中。要临时覆盖这些分配,可以将与可执行文件同名的批处理文件添加到该C:\BATCH文件夹,并且路径会在C:\ BIN中的文件之前找到该文件。它应该涵盖您可能需要做的所有事情。

当然,这些天来,规范的正确方法是在文件上创建符号连接,但原理相同。还有一点额外的奖金。如果你想要把东西在系统中把它在与路径的东西已经发生冲突,C:\BINC:\Batch文件夹就干脆抢先原-让你忽略的东西暂时或永久或重命名的东西的名字你更舒适-无需实际更改原始照片。

  • 实际上,不,不是。我说“一个更好”。内置选项可以替代或替代已经存在的替代。可执行文件与批处理文件的简单分离。而且rory的解决方案没有在文件夹应该去的路径中指定* where *。因此,大多数人会将其放在道路的尽头。由于处于末尾而不是开始,他的解决方案将不允许首先进行覆盖。Rory的解决方案与25年前我本人最初提出的解决方案大致相同。从那时起,我对模型进行了一些改进。 (2认同)
  • 随你。使用Amiga的人并非一无是处。 (2认同)

小智 6

您只需要输入以下内容即可创建别名:

c:\>alias kgs kubectl get svc

Created alias for kgs=kubectl get svc
Run Code Online (Sandbox Code Playgroud)

并使用别名,如下所示:

c:\>kgs alfresco-svc

NAME           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
alfresco-svc   ClusterIP   10.7.249.219   <none>        80/TCP    8d
Run Code Online (Sandbox Code Playgroud)

只需将以下alias.bat文件添加到您的路径即可。它只是在与自身相同的目录中创建其他批处理文件。

  @echo off
  echo.
  for /f "tokens=1,* delims= " %%a in ("%*") do set ALL_BUT_FIRST=%%b
  echo @echo off > C:\Development\alias-script\%1.bat
  echo echo. >> C:\Development\alias-script\%1.bat
  echo %ALL_BUT_FIRST% %%* >> C:\Development\alias-script\%1.bat
  echo Created alias for %1=%ALL_BUT_FIRST%
Run Code Online (Sandbox Code Playgroud)

此创建的名为批处理文件的示例kgs.bat为:

@echo off 
echo. 
kubectl get svc %* 
Run Code Online (Sandbox Code Playgroud)


Ale*_*rry 5

扩展roryhewitt 的答案。

使用 .cmd 文件而不是 DOSKEY 的一个优势是,这些“别名”可以在其他 shell 中使用,例如 PowerShell 或 WSL(Linux 的 Windows 子系统)。

在 bash 中使用这些命令的唯一问题是它可能需要更多的设置,因为您可能需要在调用“别名”之前进行一些路径操作。

例如我有 vs.cmd 这是我在 Visual Studio 中编辑文件的“别名”

@echo off
if [%1]==[] goto nofiles
start "" "c:\Program Files (x86)\Microsoft Visual Studio 
11.0\Common7\IDE\devenv.exe" /edit %1
goto end
:nofiles
start "" "C:\Program Files (x86)\Microsoft Visual Studio 
11.0\Common7\IDE\devenv.exe" "[PATH TO MY NORMAL SLN]"
:end
Run Code Online (Sandbox Code Playgroud)

使用我的“正常”项目启动 VS(在这种情况下是 VS2012 - 但根据口味进行调整),但没有给出文件,但是当给定文件时,文件将尝试附加到正在运行的 VS,在“该项目中”打开该文件,而不是启动一个VS 的新实例。

为了从 bash 使用它,我添加了一个额外的间接级别,因为“vs Myfile”并不总是有效

alias vs='/usr/bin/run_visual_studio.sh'
Run Code Online (Sandbox Code Playgroud)

在调用 vs.cmd 之前调整路径

#!/bin/bash
cmd.exe /C 'c:\Windows\System32\vs.cmd' "`wslpath.sh -w -r $1`"
Run Code Online (Sandbox Code Playgroud)

所以这样我就可以做

vs SomeFile.txt
Run Code Online (Sandbox Code Playgroud)

在命令提示符、Power Shell 或 bash 中,它会在我正在运行的 Visual Studio 中打开以进行编辑(当我刚刚在 VS 中编辑数小时时,这只是使我可怜的大脑不必处理 VI 命令或其他类似命令)。