Windows命令提示符中的别名

我已经在环境变量中的路径中添加了notepad++.exe

现在在命令提示符中,notepad++.exe filename.txt打开filename.txt. xml文件。但我只想用np filename.txt来打开文件。

我尝试使用DOSKEY np=notepad++。但它只是把一个已经打开的notepad++放在前面,而不打开文件。我怎样才能让它打开文件呢?

谢谢。

484209 次浏览

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

doskey np=notepad++.exe $*

编辑(回应Romonov的评论)Q: 有没有什么方法可以让命令提示符记住,这样我就不必每次打开新的命令提示符时都运行这个命令?

doskey是一个由命令处理器(例如cmd.exe)解释的文本命令,它不能知道在其他进程(特别是还没有启动的进程)中修改状态。

使用doskey来设置初始命令shell环境的人通常使用/K选项(通常通过快捷方式)来运行一个批处理文件,该文件执行所有常见的设置(如-设置窗口的标题,颜色等)。

cmd.exe /K env.cmd

env.cmd:

title "Foo Bar"
doskey np=notepad++.exe $*
...

为了补充josh的回答,

你可以通过以下步骤创建别名持续的

  1. DOSKEY命令创建一个.bat或.cmd文件。

  2. 执行regedit命令,进入HKEY_CURRENT_USER\Software\Microsoft\Command Processor

  3. 添加字符串值条目,名称为AutoRun和.bat/的完整的路径。cmd文件。

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

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

Windows 10,将条目添加到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

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

@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\

  • 请注意,$*语法适用于目录字符串和可执行文件(可接受参数)之后。所以在上面的例子中,用户定义的命令dropbox research指向与research相同的目录。
  • 正如Rivenfall所指出的,包含一个允许方便地编辑alias.cmd文件的命令是一个好主意。参见上面的alias。如果您在cmd会话中,输入cmd重新启动cmd并重新加载alias.cmd文件。

当我在互联网上搜索这个问题的答案时,不知怎么的,讨论要么只集中在持久性上,要么只集中在DOSKEY的某些用法上。我希望在这里有人能从这两方面受益!


这里有一个.reg文件来帮助你安装alias.cmd. exe。现在将它设置为上面建议的dropbox文件夹的示例。

Windows Registry Editor Version 5.00


[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"AutoRun"="%USERPROFILE%\\alias.cmd"

对于单用户应用程序,上面的方法就可以了。然而,在某些情况下,有必要检查alias.cmd是否首先存在于注册表项中。参见下面的示例。

在承载潜在跨用户配置的C:\Users\Public\init.cmd文件中:

@ECHO OFF
REM Add other configurations as needed
IF EXIST "%USERPROFILE%\alias.cmd" ( CALL "%USERPROFILE%\alias.cmd" )

注册表项应该相应更新为C:\Users\Public\init.cmd,或者使用.reg文件:

Windows Registry Editor Version 5.00


[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"AutoRun"="C:\\Users\\Public\\init.cmd"

此外,您还可以创建别名。在您的路径(例如C:\Windows)中使用命令

@echo %2 %3 %4 %5 %6 > %windir%\%1.cmd

一旦你这样做了,你可以这样做:

alias nameOfYourAlias commands to run

然后你可以输入命令行

nameOfYourAlias

这将执行

commands to run

但对我来说,最好的方法是添加一个程序的路径。

setx PATH "%PATH%;%ProgramFiles%\Sublime Text 3" /M

现在我崇高地奔跑

subl index.html
假设你在PATH变量中添加了notepad++.exe,这就非常简单了。 在System32文件夹中创建一个名为np.bat的文件,代码如下
@echo off
call notepad++.exe %*

%*将你给np命令的所有参数传递给notepad++.exe命令。

<强>编辑: 您需要管理员权限才能将文件保存到System32文件夹,这对我来说有点不可靠。我只是在其他地方创建了文件,并手动将其移动到System32

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

  1. 创建一个名为C: \别名的文件夹
  2. C: \别名添加到路径中(这样每次都会找到其中的任何文件)
  3. 在C:\Aliases中为每个你想要的Aliases创建一个。bat文件

也许有点过分,但与@Argyll的回答不同(否则很好),这解决了每次加载的问题。

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

@echo off
echo.
dig +noall +answer %1

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

@echo off
echo.
notepad++.exe %1

然后只需将C: \别名文件夹添加到PATH环境变量中。如果您已经打开CMD或PowerShell,则需要重新启动它。

FWIW,我有大约20个别名(单独的.bat文件)在我的C:\ aliases目录-我只是根据需要创建新的。也许不是最简洁的,但效果很好。

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

@echo off
echo.
notepad++.exe %*

这样,你可以这样做:

np c:\temp\abc.txt c:\temp\def.txt c:\temp\ghi.txt

它会打开所有3个文件。

使用doskey是正确的方法,但是当命令提示符窗口关闭时,它会重置。您需要将这一行添加到类似.bashrc的等价文件中。所以我做了以下事情:

  1. 将“C:\Program Files (x86)\ notepad++”添加到系统路径变量
  2. 复制notepad++.exe(当然,在同一个文件夹中),并将其重命名为np.exe

工作得很好!

实际上,我要给你一个更好的,让你知道一个小技巧,自从我以前在Amiga上编程时,我就用过。在你使用的任何新系统上,无论是个人的还是专业的,第一步是创建两个文件夹:C:\BINC:\BATCH。然后修改路径语句,以C:\BATCH;C:\BIN;[rest of path]的顺序将两者放在开头。

这样做之后,如果你有一些需要访问的偏僻实用程序,只需将它们复制到C:\BIN文件夹中,它们就在你的路径中。为了临时覆盖这些赋值,你可以在C:\BATCH文件夹中添加一个与可执行文件同名的批处理文件,路径会在C:\BIN文件之前找到它。它应该涵盖你可能需要做的任何事情。

当然,现在规范的正确方法是创建到文件的符号连接,但同样的原则也适用。还有一点额外的好处。如果你想在系统中放入一些与路径中已经存在的东西冲突的东西,将其放在C:\BINC:\Batch文件夹中只会先发制人原始的东西——允许你临时或永久地覆盖东西,或者将东西重命名为你更喜欢的名字——而不实际改变原始的东西。

或者你也可以使用cmder,它允许你像linux一样添加别名:

alias subl="C:\Program Files\Sublime Text 3\subl.exe" $*

因为你已经在路径中有notepad++.exe。在该文件夹中创建一个名为np的快捷方式,并将其指向notepad++.exe

Windows 10中的控制台别名

要定义控制台别名,可以使用Doskey.exe来创建宏,或者使用AddConsoleAlias函数。

dos命令

doskey test=cd \a_very_long_path\test

要传递参数,在结尾添加$*: doskey short=longname $*

AddConsoleAlias

AddConsoleAlias( TEXT("test"),
TEXT("cd \\<a_very_long_path>\\test"),
TEXT("cmd.exe"));

更多信息在这里控制台的别名dos命令参数

首先,您可以创建一个名为np的文件。cmd并将其放在PATH搜索列表中的文件夹中。 然后,编辑np。

. CMD文件如下
@echo off
notepad++.exe

这个解决方案并不合适,但在某些情况下是有用的。

首先创建一个文件夹,并将其添加到系统路径中。转到要为其创建别名的任何程序的可执行文件。右击并发送到桌面(创建快捷方式)。将快捷方式重命名为合适的别名。现在,选择快捷方式并放入文件夹中。

从运行提示符,您可以直接键入快捷方式的名称,您可以有程序为您打开。但是从命令提示符,你需要追加.lnk并按enter,程序将被打开。

展开roryhewitt答案。

在DOSKEY上使用.cmd文件的一个优势是,这些“别名”可以在其他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

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

为了从bash使用这个,我然后添加了一个额外的间接级别,因为“vs Myfile”并不总是工作

alias vs='/usr/bin/run_visual_studio.sh'

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

#!/bin/bash
cmd.exe /C 'c:\Windows\System32\vs.cmd' "`wslpath.sh -w -r $1`"

这样我就可以

vs SomeFile.txt

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

你要创建一个别名,只需输入:

c:\>alias kgs kubectl get svc


Created alias for kgs=kubectl get svc

并使用别名如下:

c:\>kgs alfresco-svc


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

只需将下面的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%

创建的批处理文件kgs.bat的一个例子是:

@echo off
echo.
kubectl get svc %*

如果你想在每个目录/每个项目上启用别名,试试下面的方法:

  1. 首先,创建一个批处理文件,该文件将在当前目录中查找名为aliases的文件,并从该文件初始化别名,我们称其为make-aliases.cmd

    @echo off
    if not exist aliases goto:eof
    echo [Loading aliases...]
    for /f "tokens=1* delims=^=" %%i in (aliases) do (
    echo   %%i ^<^=^> %%j
    doskey %%i=%%j
    )
    doskey aliases=doskey /macros
    echo   --------------------
    echo   aliases ^=^> list  all
    echo   alt+F10 ^=^> clear all
    echo [Done]
    
  2. Then, create aliases wherever you need them using the following format:

    alias1 = command1
    alias2 = command2
    ...
    

    例如:

    b = nmake
    c = nmake clean
    r = nmake rebuild
    
  3. Then, add the location of make-aliases.cmd to your %PATH% variable to make it system-wide or just keep it in a known place.

  4. Make it start automatically with cmd.

    • I would definitely advise against using HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun for this, because some development tools would trigger the autorun script multiple times per session.

    • If you use ConEmu you could go another way and start the script from the startup task (Settings > Startup > Tasks), for example, I created an entry called {MSVC}:

      cmd.exe /k "vcvars64 && make-aliases",

      and then registered it in Explorer context menu via Settings > Integration> with Command: {MSVC} -cur_console:n, so that now I can right-click a folder and launch a VS developer prompt inside it with my aliases loaded automatically, if they happen to be in that folder.

      Without ConEmu, you may just want to create a shortcut to cmd.exe with the corresponding command or simply run make-aliases manually every time.

Should you happen to forget your aliases, use the aliases macro, and if anything goes wrong, just reset the current session by pressing Alt+F10, which is a built-in command in cmd.

当然,在我找到最方便的解决办法之前,我是不会休息的。结合大量互联网上的答案和话题,以下是你可以得到的。

  • 自动加载cmd的每个实例
  • 对于别名
    不需要关键字DOSKEY 例如:ls=ls --color=auto $* < / em >

注意,这在很大程度上是基于Argyll的回答和评论,一定要阅读它来理解概念。

如何让它起作用?

    创建一个别名为
    mac宏文件 你甚至可以使用bat/cmd文件来运行其他东西(类似于linux中的.bashrc)
  1. 在注册表中注册,以便在cmd
    的每个实例上运行 李或者只在需要时通过快捷方式运行它 < / >

示例步骤:

%userprofile%/cmd/aliases.mac

;==============================================================================
;= This file is registered via registry to auto load with each instance of cmd.
;================================ general info ================================
;= https://stackoverflow.com/a/59978163/985454  -  how to set it up?
;= https://gist.github.com/postcog/5c8c13f7f66330b493b8  -  example doskey macrofile
;========================= loading with cmd shortcut ==========================
;= create a shortcut with the following target :
;= %comspec% /k "(doskey /macrofile=%userprofile%\cmd\aliases.mac)"


alias=subl %USERPROFILE%\cmd\aliases.mac
hosts=runas /noprofile /savecred /user:QWERTY-XPS9370\administrator "subl C:\Windows\System32\drivers\etc\hosts" > NUL


p=@echo "~~ powercfg -devicequery wake_armed ~~" && powercfg -devicequery wake_armed && @echo "~~ powercfg -requests ~~ " && powercfg -requests && @echo "~~ powercfg -waketimers ~~"p && powercfg -waketimers


ls=ls --color=auto $*
ll=ls -l --color=auto $*
la=ls -la --color=auto $*
grep=grep --color $*


~=cd %USERPROFILE%
cdr=cd C:\repos
cde=cd C:\repos\esquire
cdd=cd C:\repos\dixons
cds=cd C:\repos\stekkie
cdu=cd C:\repos\uplus
cduo=cd C:\repos\uplus\oxbridge-fe
cdus=cd C:\repos\uplus\stratus


npx=npx --no-install $*
npxi=npx $*
npr=npm run $*


now=vercel $*




;=only in bash
;=alias whereget='_whereget() { A=$1; B=$2; shift 2; eval \"$(where $B | head -$A | tail -1)\" $@; }; _whereget'


history=doskey /history
;= h [SHOW | SAVE | TSAVE ]
h=IF ".$*." == ".." (echo "usage: h [ SHOW | SAVE | TSAVE ]" && doskey/history) ELSE (IF /I "$1" == "SAVE" (doskey/history $g$g %USERPROFILE%\cmd\history.log & ECHO Command history saved) ELSE (IF /I "$1" == "TSAVE" (echo **** %date% %time% **** >> %USERPROFILE%\cmd\history.log & doskey/history $g$g %USERPROFILE%\cmd\history.log & ECHO Command history saved) ELSE (IF /I "$1" == "SHOW" (type %USERPROFILE%\cmd\history.log) ELSE (doskey/history))))
loghistory=doskey /history >> %USERPROFILE%\cmd\history.log


;=exit=echo **** %date% %time% **** >> %USERPROFILE%\cmd\history.log & doskey/history $g$g %USERPROFILE%\cmd\history.log & ECHO Command history saved, exiting & timeout 1 & exit $*
exit=echo **** %date% %time% **** >> %USERPROFILE%\cmd\history.log & doskey/history $g$g %USERPROFILE%\cmd\history.log & exit $*


;============================= :end ============================
;= rem ******************************************************************
;= rem * EOF - Don't remove the following line.  It clears out the ';'
;= rem * macro. We're using it because there is no support for comments
;= rem * in a DOSKEY macro file.
;= rem ******************************************************************
;=

现在你有三个选择:

  • a)手动加载快捷方式

    使用以下目标创建cmd.exe的快捷方式 %comspec% /k "(doskey /macrofile=%userprofile%\cmd\aliases.mac)" < / p >

  • b)只注册aliases.mac宏文件

  • c)注册一个常规的cmd/bat文件来运行任意命令(类似于linux的.bashrc)
    参见example cmdrc.cmd文件在底部

注意:下面,Autorun_只是一个占位符键,不会做任何事情。选择一个并重命名另一个。

手动编辑注册表在这个路径:

[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]

  Autorun    REG_SZ    doskey /macrofile=%userprofile%\cmd\aliases.mac
Autorun_    REG_SZ    %USERPROFILE%\cmd\cmdrc.cmd

或导入reg文件:

%userprofile%/cmd/cmd-aliases.reg

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"Autorun"="doskey /macrofile=%userprofile%\\cmd\\aliases.mac"
"Autorun_"="%USERPROFILE%\\cmd\\cmdrc.cmd"

%userprofile%/cmd/cmdrc.cmd 你不需要这个文件,如果你决定b)以上

:: This file is registered via registry to auto load with each instance of cmd.
:: https://stackoverflow.com/a/59978163/985454


@echo off
doskey /macrofile=%userprofile%\cmd\aliases.mac


:: put other commands here


cls
echo Hi Qwerty, how are you today?

非常简单的自定义别名:

在系统的任何位置创建一个新文件夹。创建一个名为.cmd扩展名的别名的新文件。将所有命令写入文件,例如

cd /D D:\Folder
g++ -o run whatever.cpp

复制文件夹的路径。

Settings > System > About > Advanced system settings > Enviornment Variables...

现在在System variables部分下找到Path变量。单击它一次,然后单击Edit。现在单击New并粘贴复制的文本。

单击OKOKOK。重新启动Powershell/cmd提示符,瞧,您得到了持久的别名!你也可以使用相同的文件夹来创建其他别名,而不需要再次更改Path变量!

由于doskey不适用于PowerShell或Windows 10终端应用程序,我分享这个解决方案。

演示如何在Windows 10中创建别名。输入参数的别名:

com=D:\website_development\laragon\bin\php\php-8.1.2-Win32-vs16-x64/php8 D:\website_development\laragon\bin\composer/composer.phar

过程:

  1. 创建一个名为“scripts”的文件夹;在C:驱动器中。

  2. 在scripts文件夹中,创建com.bat

  3. < p > com.bat开放

  4. 在特定的PHP版本下运行composer命令:

    @echo off
    set path=D:\website_development\laragon\bin\php\php-8.1.2-Win32-vs16-x64/php8 D:\website_development\laragon\bin\composer/composer.phar
    set args=%*
    set command=%path% %args%
    %command%
    
  5. < p >保存它

  6. 时< p >单击“开始”

  7. 搜索“编辑环境变量”;

  8. < p >单击“Advanced"

  9. 添加你的“脚本”;目录到PATH

现在您可以作为该命令的别名运行该命令。

注意:如果你想添加一个新的别名,只需创建一个新的bat文件。

我的快速而肮脏的解决方案是在PATH中已经存在的任何目录中添加一个BAT文件。

例子:

@ECHO OFF
doskey dl=aria2c --file-allocation=none $*
aria2c --file-allocation=none %**

所以,当你第一次跑步“dl"它将执行bat文件,但从第二次开始,它将使用别名。