Windows命令提示符中的别名

时间:2013-12-11 22:11:17

标签: windows alias command-prompt

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

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

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

感谢。

17 个答案:

答案 0 :(得分:348)

要添加到josh的答案,

您可以使用以下步骤

制作别名持久性
  1. 使用DOSKEY命令创建.bat或.cmd文件。
  2. 运行regedit并转到HKEY_CURRENT_USER\Software\Microsoft\Command Processor
  3. 添加名称为AutoRun的字符串值条目以及.bat / .cmd文件的完整路径。

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

  4. 这样,每次运行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\
    

    • 请注意,$*语法在目录字符串之后以及接收参数的可执行文件中起作用。因此,在上面的示例中,用户定义的命令dropbox research指向与research相同的目录。
    • 正如Rivenfall指出的那样,最好包含一个允许方便地编辑alias.cmd文件的命令。请参阅上面的alias。如果您在cmd会话中,请输入cmd以重新启动cmd并重新加载alias.cmd文件。

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


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

    Windows Registry Editor Version 5.00
    
    [HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
    "AutoRun"="%USERPROFILE%\\alias.cmd"
    

答案 1 :(得分:221)

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

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 $*
...

答案 2 :(得分:79)

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

  1. 创建名为 C:\ Aliases
  2. 的文件夹
  3. C:\ Aliases 添加到您的路径中(因此每次都会找到其中的所有文件)
  4. 在C:\别名中为您想要的每个别名创建 .bat 文件
  5. 也许是矫枉过正,但与@Argyll的(其他优秀)答案不同,这解决了每次加载的问题。

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

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

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

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

    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个文件。

答案 3 :(得分:29)

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

@echo off
call notepad++.exe %*

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

修改 您需要管理员权限才能将文件保存到System32文件夹,这对我来说有点不可思议。我刚刚在其他地方创建了文件并手动将其移动到System32。

答案 4 :(得分:27)

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

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

答案 5 :(得分:14)

此外,您可以使用命令

在路径中创建alias.cmd(例如C:\ Windows)
@echo %2 %3 %4 %5 %6 > %windir%\%1.cmd

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

alias nameOfYourAlias commands to run 

然后你可以输入comman line

nameOfYourAlias 

这将执行

commands to run 

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

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

现在我以

的身份运行崇高
subl index.html

答案 6 :(得分:9)

Windows 10中的控制台别名

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

DOSKEY

doskey test=cd \a_very_long_path\test

要在最后添加parameters添加$*doskey short=longname $*

AddConsoleAlias

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

此处提供了更多信息Console AliasesDoskeyParameters

答案 7 :(得分:6)

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

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

答案 8 :(得分:4)

实际上,我会更好地告诉你一件事,让我介绍一下我曾经使用的一种技术,因为我曾经在Amiga上编程。在您使用的任何新系统上,无论是个人还是专业,第一步是创建两个文件夹:C:\ BIN和C:\ BATCH。然后修改你的路径语句,将它们放在C:\ BATCH; C:\ BIN; [路径的其余部分]的开头。

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

当然,现在这样做的规范正确方法是创建文件的符号连接,但同样的原则适用。还有一些额外的额外奖励。如果你想在系统中放置一些与路径中已经存在的东西冲突的东西,将它放在C:\ BIN或C:\ Batch文件夹中,只需预先原始文件 - 允许你暂时或永久覆盖内容,或者将内容重命名为您更熟悉的名称 - 而不会实际更改原始内容。

答案 9 :(得分:3)

扩展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中进行编辑时小时)。

答案 10 :(得分:2)

自然,直到我有了最方便的解决方案后,我才会休息。结合庞大互联网上的许多答案和主题,这就是您所能拥有的。

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

请注意,这主要基于Argyll's answer和注释,请务必阅读以了解概念。

如何使其工作?

  1. 使用别名创建mac宏文件
    您甚至可以使用bat / cmd文件来运行其他内容(类似于Linux中的.bashrc
  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 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)"

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

  • c)注册常规cmd/bat文件以运行任意命令
    请参阅底部的示例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

答案 11 :(得分:1)

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

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

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

答案 12 :(得分:0)

非常简单的自定义别名:

在系统的任何位置创建一个新文件夹。使用 .cmd 扩展名创建一个名为任意名称的新文件。在文件中写入所有命令,如

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

复制文件夹的路径。

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

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

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

答案 13 :(得分: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>通过Command:> {MSVC} -cur_console:n在Explorer上下文菜单中注册它,因此现在我可以右键单击文件夹并启动VS开发人员提示时,我的aliases会自动加载到该文件夹​​中。

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

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

答案 14 :(得分:0)

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

@echo off
notepad++.exe

答案 15 :(得分:0)

由于您的路径中已有notepad++.exe。在名为np的文件夹中创建快捷方式,并将其指向notepad++.exe

答案 16 :(得分:-4)

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

  1. 添加&#34; C:\ Program Files(x86)\ Notepad ++&#34;到系统路径变量
  2. 制作notepad ++。exe的副本(当然是在同一个文件夹中)并将其重命名为np.exe
  3. 工作得很好!