繁体   English   中英

Windows 命令提示符中的别名

[英]Aliases in Windows command prompt

我已将notepad++.exe添加到环境变量中的路径中。

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

我尝试使用DOSKEY np=notepad++ 但它只是将已经打开的记事本++带到最前沿,而无需打开文件。 我怎样才能让它打开文件?

谢谢。

要添加到乔希的答案中,

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

  1. 使用DOSKEY命令创建 .bat 或 .cmd 文件。

  2. 运行 regedit 并转到HKEY_CURRENT_USER\Software\Microsoft\Command Processor

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

    例如, %USERPROFILE%\alias.cmd ,用%USERPROFILE% 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 现在将其设置为上面建议的保管箱文件夹的示例。

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"

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

doskey np=notepad++.exe $*

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

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

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

cmd.exe /K env.cmd

环境.cmd:

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

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

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

或者,您可以使用cmder来添加别名,就像 linux 一样:

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

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

@echo off
call notepad++.exe %*

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

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

此外,您可以使用以下命令在路径(例如 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

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参数

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

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

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

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

当然,如今,执行此操作的规范正确方法是为文件创建一个符号连接,但同样的原则也适用。 还有一点额外的好处。 如果您想在系统中放入与路径中已有的内容冲突的内容,将其放入C:\BINC:\Batch文件夹将简单地抢占原始文件 - 允许您临时或永久覆盖内容,或将事物重命名为您更喜欢的名称 - 而无需实际更改原始名称。

扩展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 命令或类似的命令)。

自然,在我找到最方便的解决方案之前,我不会休息。 结合庞大互联网上的众多答案和主题,这就是您可以拥有的。

  • 使用每个cmd实例自动加载
  • 别名不需要关键字DOSKEY
    例如: ls=ls --color=auto $*

请注意,这主要基于Argyll 的回答和评论,一定要阅读它以理解这些概念。

如何让它发挥作用?

  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

非常简单的自定义别名:

在系统的任何位置创建一个新文件夹。 使用.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变量!

该解决方案不是一个恰当的解决方案,但在某些情况下可以发挥作用。

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

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

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

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

@echo off
notepad++.exe

如果您想在每个目录/每个项目的基础上启用别名,请尝试以下操作:

  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注册它,这样现在我可以右键单击一个文件夹并在其中启动一个 VS 开发人员提示,并自动加载我的aliases ,如果他们恰好在那个文件夹里。

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

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

由于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. C:驱动器中创建一个名为“scripts”的文件夹。

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

  3. 打开战斗

  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. 保存

  6. 点击“开始”

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

  8. 点击“高级”

  9. 将您的“脚本”目录添加到PATH

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

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

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

例子:

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

因此,第一次运行“dl”时,它将执行 bat 文件,但从第二次开始,它将使用别名。

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

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

工作得很好!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM