Answers:
为了增加乔什的答案,
您可以通过以下步骤使别名持久化,
DOSKEY
命令创建.bat或.cmd文件。HKEY_CURRENT_USER\Software\Microsoft\Command Processor
添加具有名称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
。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"
system
函数)运行自动运行批处理文件。如果AUTORUN
定义了某个变量(例如),则需要退出。否则,set AUTORUN=1
使用macrofile选项设置环境()并一次性设置doskey,而不是运行doskey.exe来定义每个别名。
HKEY_CURRENT_USER\Software\Microsoft\Command Processor
?我似乎再也无法在regedit中找到该路径了
doskey /macrofile="%USERPROFILE%\alias"
。接下来,将别名放入“ alias”文件中,而不使用“ doskey”部分。管理员可以使用的一种解决方案,用于将自动运行定义限制为用户可以自行创建的别名。防止用户运行其他内容。
您需要传递参数,请尝试以下操作:
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 $*
...
doskey npp="C:\Program Files (x86)\Notepad++\notepad++.exe" $*
如果您只需要一些简单的命令,则可以按照以下步骤操作:
也许有些过分了,但是与@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个文件。
doskey
。
ls.exe
绝对可以。好点子。我虽然使用了doskey替代方法。
docker exec --user devilbox dvlbx_php_1 php %*
另外,您可以使用cmder
哪一个来添加别名,就像linux一样:
alias subl="C:\Program Files\Sublime Text 3\subl.exe" $*
鉴于您已将notepad ++。exe添加到PATH变量中,因此非常简单。np.bat
使用以下代码在System32文件夹中创建一个文件:
@echo off
call notepad++.exe %*
该%*
通行证沿所有参数你给的np
命令的notepad++.exe
命令。
编辑: 您将需要管理员访问权限才能将文件保存到System32文件夹,这对我来说有点不可思议。我只是在其他地方创建了文件,然后将其手动移至System32。
"notepad++.exe *somefiles*"
,匹配的文件将打开。当我尝试使用建议的批处理文件(即)时"npp *somefiles*"
,它确实打开了NPP实例,但没有打开我传递的文件。有什么想法吗?
另外,您可以使用以下命令在路径(例如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
您只需要输入以下内容即可创建别名:
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:\BIN
和C:\BATCH
。然后修改您的path语句以将两者都放在顺序的开头C:\BATCH;C:\BIN;[rest of path]
。
完成此操作后,如果您只有很少的偏僻工具,则只需将它们复制到C:\BIN
文件夹中就可以访问它们,并且它们就在您的路径中。要临时覆盖这些分配,可以将与可执行文件同名的批处理文件添加到该C:\BATCH
文件夹,并且路径会在C:\ BIN中的文件之前找到该文件。它应该涵盖您可能需要做的所有事情。
当然,这些天来,规范的正确方法是在文件上创建符号连接,但是适用相同的原理。还有一点额外的奖金。如果你想要把东西在系统中把它在与路径的东西已经发生冲突,C:\BIN
或C:\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中打开以进行编辑(这使我可怜的大脑不必处理VI命令或在VS中编辑了几个小时的命令)。
自然,除非有最方便的解决方案,否则我不会休息。结合庞大互联网上的许多答案和主题,这就是您可以拥有的。
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
如果您要基于每个目录/每个项目启用别名,请尝试以下操作:
首先,创建一个批处理文件,该文件将查找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]
然后,aliases
使用以下格式在需要的地方创建它们:
alias1 = command1
alias2 = command2
...
例如:
b = nmake
c = nmake clean
r = nmake rebuild
然后,将的位置添加make-aliases.cmd
到%PATH%
变量中以使其在系统范围内或仅将其保存在已知位置。
使它从自动开始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
。
使用doskey是执行此操作的正确方法,但是在“命令提示符”窗口关闭时,它会重置。您需要将该行添加到类似.bashrc的名称中。所以我做了以下事情:
效果很好!