Windows命令提示符中的别名


358

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

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

我尝试使用DOSKEY np=notepad++。但这只是在不打开文件的情况下将已经打开的notepad ++带到了前台。如何使其打开文件?

谢谢。


2
将可执行文件名称更改为所需的任何名称。您可以从文件资源管理器中执行此操作!
IgorGanapolsky

Answers:


441

为了增加乔什的答案,

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

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

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

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

对于Windows 10HKEY_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。现在将其设置为上述建议的保管箱文件夹的示例。

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"

2
正是我所需要的;工作完美;我建议添加一个doskey来实际编辑env.cmd文件
Rivenfall

8
这是幼稚且低效的。将对cmd.exe的每个实例(包括该system函数)运行自动运行批处理文件。如果AUTORUN定义了某个变量(例如),则需要退出。否则,set AUTORUN=1使用macrofile选项设置环境()并一次性设置doskey,而不是运行doskey.exe来定义每个别名。
Eryk Sun

4
您可以发布@eryksun或链接到一个不太天真的例子吗?我知道如果定义了自动运行,如何退出,但是对于如何首先设置或取消设置而不运行CMD感到困惑。
马特·威尔基,

3
今天的替代品是什么HKEY_CURRENT_USER\Software\Microsoft\Command Processor?我似乎再也无法在regedit中找到该路径了
1

4
我喜欢这个。类似的选项是放入自动运行:doskey /macrofile="%USERPROFILE%\alias"。接下来,将别名放入“ alias”文件中,而不使用“ doskey”部分。管理员可以使用的一种解决方案,用于将自动运行定义限制为用户可以自行创建的别名。防止用户运行其他内容。
user1708042

237

您需要传递参数,请尝试以下操作:

doskey np=notepad++.exe $*

编辑(响应Romonov的评论)问:有什么方法可以使命令提示符记住,以便我不必在每次打开新命令提示符时都运行此命令?

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

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

cmd.exe /K env.cmd

env.cmd:

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

7
这适用于我在其中运行此命令的命令提示符。但是,如果我关闭窗口并打开一个新的命令提示符。它不记得np命令。有什么方法可以使命令提示符记住,以便我不必在每次打开新的命令提示符时都运行此命令?
罗蒙诺夫2013年

5
在不更改PATH的情况下保持相同的行为:doskey npp="C:\Program Files (x86)\Notepad++\notepad++.exe" $*
Matt Bierner 2014年

5
doskey.exe与cmd.exe没有关系。它在控制台窗口中为当前或指定的可执行文件设置别名,该别名由conhost.exe实例托管。在客户端应用程序(例如,cmd.exe或powershell.exe)读取该行之前,在输入行的开头匹配并替换控制台别名。它们不能一般地用作命令,例如,不能在批处理文件中或通过管道输入。
Eryk Sun

嗨,我已经使用cmder来打开phpstorm ...它会打开phpstorm,但是它会继续打开我最近打开的项目,而不是我当前所在的项目目录...我如何才能打开我所在的任何DIR?
PA-GW

113

如果您只需要一些简单的命令,则可以按照以下步骤操作:

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

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

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

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

您的np文件将包含以下内容:

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

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

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

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

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

这样,您可以执行以下操作:

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

它将打开所有3个文件。


4
我个人很长时间使用这种方法。如果有人不想走的话,这是一种非常容易做的方法doskey
班蒂亚18-3-6

4
此方法(cmd文件作为别名)的一个优点是,如果您使用WSL(Windows的Linux子系统),这些cmd也可以在bash中使用。尽管经常(取决于您的别名),但在调用cmd文件之前,您需要使用wslpath.sh或类似方法进行一些路径操作
Alex Perry

1
@roryhewitt哦,是的,指定的完整路径ls.exe绝对可以。好点子。我虽然使用了doskey替代方法。
Qwerty

4
可能希望添加%*而不是%1来传递所有参数,而不仅仅是第一个。
微型飞行器

1
大!现在我可以安装PHP,而无需安装它,只需将docker用作devilbox并添加docker exec --user devilbox dvlbx_php_1 php %*
AlvaroFlañoLarrondo 19/12/1

38

另外,您可以使用cmder哪一个来添加别名,就像linux一样:

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

12
虽然这不能回答问题。对于具有Linux背景的人们来说,重要的是要了解Windows CMD可以满足他们的即时需求。
约瑟夫·凯西

1
有很多选择。Windows的Git附带一个“ git-bash”。
cowlinator

要在Cmder中添加别名,请参见此处的示例。
jdhao

嗨,我已经使用cmder来打开phpstorm ...它会打开phpstorm,但是它会继续打开我最近打开的项目,而不是我当前所在的项目目录...我如何才能打开我所在的任何DIR?
PA-GW

29

鉴于您已将notepad ++。exe添加到PATH变量中,因此非常简单。np.bat使用以下代码在System32文件夹中创建一个文件:

@echo off
call notepad++.exe %*

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

编辑: 您将需要管理员访问权限才能将文件保存到System32文件夹,这对我来说有点不可思议。我只是在其他地方创建了文件,然后将其手动移至System32。


我已经有一个小小的.bat实用程序文件的文件夹,所以我喜欢这样做,而不是弄乱注册表或.cmd文件
2016年

1
我只是尝试过,它与直接调用Notepad ++的效果不同。如果您在打开的文件名中使用通配符,然后直接调用NPP,则它可以工作,例如,您可以这样做"notepad++.exe *somefiles*",匹配的文件将打开。当我尝试使用建议的批处理文件(即)时"npp *somefiles*",它确实打开了NPP实例,但没有打开我传递的文件。有什么想法吗?
SSilk

14

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

@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

9

Windows 10中的控制台别名

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

多斯基

doskey test=cd \a_very_long_path\test

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

添加控制台别名

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

此处的更多信息控制台别名Doskey参数


7

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

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 %* 

6

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

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

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


1
这与roryhewitt的答案相同。
让·弗朗索瓦·法布尔

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

2
随你。使用Amiga的人并非一无是处。
让·弗朗索瓦·法布尔

足够公平:)就我而言,Aliases文件夹位于路径的开头,但是无论如何,我个人都不想覆盖默认值-我的别名始终使用不同的名称。因此,我使用“ dig2”和“ digx”作为“ dig”的别名,但仍然具有“ dig”可用(无需指定其文件夹)。还为Amiga +1 :)
roryhewitt

尼斯回忆,我也改名为bat文件,以启动序列:)
ErdinçÇorbacı

5

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中打开以进行编辑(这使我可怜的大脑不必处理VI命令或在VS中编辑了几个小时的命令)。


2

该解决方案不是一个合适的解决方案,但在某些情况下可以达到目的。

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

在运行提示下,您可以直接输入快捷方式名称,然后可以为您打开程序。但是在命令提示符下,您需要附加.lnk并按Enter键,程序将被打开。


1

自然,除非有最方便的解决方案,否则我不会休息。结合庞大互联网上的许多答案和主题,这就是您可以拥有的。

  • 会自动加载的每个实例 cmd
  • 不需要关键字DOSKEY作为别名

请注意,这主要是基于Argyll的回答和评论,请务必阅读以理解其概念。

怎么运行的?

1)用别名创建一个宏文件(或一个bat / cmd文件也可以运行其他东西)
2)在注册表中注册它以在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 cmd link 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

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

~=cd %USERPROFILE%
cdr=cd c:\repos
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

;============================= :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)仅注册宏文件
b)使用常规cmd/bat文件来运行任意命令
重命名您要的命令Autorun

[HKEY_CURRENT_USER\Software\Microsoft\Command Processor] -手动
  Autorun    REG_SZ    doskey /macrofile=%userprofile%\cmd\aliases.mac
  Autorun_    REG_SZ    %USERPROFILE%\cmd\env.cmd
%userprofile%/cmd/cmd-aliases.reg -或通过reg文件
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"Autorun"="doskey /macrofile=%userprofile%\\cmd\\aliases.mac"
"Autorun_"="%USERPROFILE%\\cmd\\env.cmd"
%userprofile%/cmd/env.cmd 如果您决定执行上述a),则不需要此文件
:: 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

0

既然您已经notepad++.exe走了。在名为的文件夹中创建一个快捷方式,np并将其指向notepad++.exe


0

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

@echo off
notepad++.exe

0

如果您要基于每个目录/每个项目启用别名,请尝试以下操作:

  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. 然后,aliases使用以下格式在需要的地方创建它们:

    alias1 = command1
    alias2 = command2
    ...
    

    例如:

    b = nmake
    c = nmake clean
    r = nmake rebuild
    
  3. 然后,将的位置添加make-aliases.cmd%PATH%变量中以使其在系统范围内或仅将其保存在已知位置。

  4. 使它从自动开始cmd

    • 我绝对不建议HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun这样做,因为某些开发工具会在每个会话中多次触发自动运行脚本。

    • 如果您使用ConEmu你可以走另一条路,然后从启动任务启动脚本(Settings> Startup> Tasks),例如,我创建了一个叫做条目{MSVC}

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

      然后通过Settings> Integration>使用来在Explorer上下文菜单中注册它Command: {MSVC} -cur_console:n,以便现在我可以右键单击一个文件夹,并在其中启动VS开发人员提示aliases,如果它们恰好位于该文件夹中,则会自动将我加载。

      如果没有ConEmu,您可能只想cmd.exe使用相应的命令创建的快捷方式,或者只是make-aliases每次都手动运行。

如果您碰巧忘记了别名,请使用aliases宏,如果出现任何问题,只需按Alt+ 即可重置当前会话F10,这是内置的命令cmd


-4

使用doskey是执行此操作的正确方法,但是在“命令提示符”窗口关闭时,它会重置。您需要将该行添加到类似.bashrc的名称中。所以我做了以下事情:

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

效果很好!

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.