如何在Windows命令行中设置别名?
我以前在bash上工作,从别名中受益匪浅。在Windows命令行中有没有类似的方法?
我不想模拟Linux环境,所以cygwin不是一个选择。我只是需要一些非常长的命令的快捷方式,比如cd a_very_long_path
。
我以前在bash上工作,从别名中受益匪浅。在Windows命令行中有没有类似的方法?
我不想模拟Linux环境,所以cygwin不是一个选择。我只是需要一些非常长的命令的快捷方式,比如cd a_very_long_path
。
正如Christian.K在评论中所说,DOSKEY命令可以用来定义宏,它类似于别名。
doskey macroName=macroDefinition
宏参数在定义中通过$
前缀位置引用。$1
至$9
,$*
代表所有。
更多信息请参见 doskey technet 文档 ,或在命令行输入 doskey /?
或 help doskey
。
但DOSKEY宏有严重的限制。
someMacro|findstr '^'
和dir|someMacro
都失败。for /f %A in ('someMacro') do ...
失败 这些限制非常严重,所以我很少使用DOSKEY宏。
显然,你可以创建批处理脚本而不是宏,并确保脚本的位置在你的PATH中。但是,如果你想在另一个脚本中使用该脚本,你必须在每个脚本前加上CALL。
你可以为长的和经常使用的命令创建简单的变量 “宏",但是语法在输入时有点笨拙,因为当你要使用它时,你需要扩展 "宏"。
定义。
set "cdMe=cd a_very_long_path"
使用方法 (来自命令行或脚本)
%cdMe%
``` 。
你可以制作一个批处理脚本并将其保存到你的路径中。
在 Linux 上,你可以制作一个脚本并将其添加到 ~/bin
文件夹中,在 Windows 上你也可以这样做。
将%USERPROFILE%\bin
添加到你的PATH
环境变量中。然后把你的脚本保存在那里。
quickcd.cmd
@echo off
cd /d a_very_long_path
现在你可以在命令行输入quickcd
。
它也可以在脚本中使用call
函数
call quickcd
``` 调用。
subst
如果你真的想绕过这样的东西。
C:> cd \users\myLoginID\documents\clients\MTV\strategy\roadmap\deliverable\final
你可以使用subst
命令将长路径映射到一个单独的驱动器上
subst m: c:\users\myLoginID\documents\clients\MTV\strategy\roadmap\deliverable\final
然后,当你想跳转到那个文件夹时,你可以在命令行输入m:
。
与doskey
相比,这样做的好处是它可以在所有批处理程序中工作,并在Windows中的任何文件对话框中显示出来。
如果你不想要这个映射了。
subst m: /D
我做了一个这样的 “别名",专门用于改变目录。基本上,我创建了一个名为fav.bat
的文件,并将其放入PATH中的一个文件夹中(例如C:\MyBatches):
@setlocal
@echo off
set userChoice=%1
rem The format is:
rem call :condition SHORTCUT FOLDER
call :condition web c:\Git\SecThor\SecWeb\App\
call :condition cloud c:\Git\SecThor\SecCloud\dojo.backend\
call :condition good c:\Users\Vitaly\Dropbox\Projects\goodread-friends\
endlocal
popd
GOTO :eof
:condition
rem We do PUSHD twice since endlocal does popd once :|
if "%userChoice%"=="%1" pushd %2 & pushd %2 & echo pushd %2
if "%userChoice%"=="" echo %1 =^> %2
GOTO :eof
然后我就可以很快地跳转到任何预定义的文件夹。我写了一篇关于这个技术的完整文章 这里 。
你可以使用doskey.exe ,下面是一个例子:
doskey qcd=cd [pathname]
现在如果你输入qcd
,它将cd到该路径。
这里有一些关于doskey宏的帮助。
doskey [macroname]=[command]
这是最简单的形式,下面是一个例子:
doskey word=echo This is a really, really long sentence.
如果你输入word
输出是:
这是一个非常非常长的句子。
你可以用$1-$9作为参数,下面是一个例子:
doskey npd=notepad $1
如果你输入npd
,它将打开notepad,但是如果我们输入npd test.txt
,它将打开notepad中的test.txt。
你可以对所有参数使用$/*,下面是另一个例子:
doskey prt=echo $*
如果你输入prt This is short.
,那么输出将是。
这是短的。
你可以使用$T来执行多个命令,下面是一个例子:
doskey newline=echo $1 $T echo $2
如果你输入newline Hello and
,那么输出将是:
这是短的。
Hello
and
我希望你能理解。
假设你仍然在同一个驱动器上,即不需要D:
那么cd D:\somedir假设你仍然在同一个驱动器上,即不需要
D:`那么。
在我的例子中,C:存放系统文件,但所有的工作都在D:
2个部分。首先设置一些工作目录,使用批处理文件。
比方说localprofile.cmd。你可以有多个这样的文件,只要根据需要运行它们就可以了。
set wd1=D:\home\work\fb440.dumper
set wd2=D:\home\work\py\tests
现在用另一个命令文件来移动,根据你刚才设置的那些环境变量。
wd.cmd
echo off
d:
if %1.==. set | findstr wd
if %1==1 cd %wd1%
if %1==2 cd %wd2%
if %1==3 cd %wd3%
if %1==4 cd %wd4%
if %1==5 cd %wd5%
if %1==6 cd %wd6%
还有一点使用示例。
D:\home\bin>wd 2
D:\home\bin>echo off
D:\home\work\py\tests>wd 1
D:\home\work\py\tests>echo off
wd本身应该是显示书签目录的列表。它工作了,但不知道为什么我得到这个 “意外的cd "消息。
D:\home\work\fb440.dumper>wd
D:\home\work\fb440.dumper>echo off
wd1=D:\home\work\fb440.dumper
wd2=D:\home\work\py\tests
cd was unexpected at this time.
D:\home\work\fb440.dumper>
常规的.cmd批次
除了目录导航,你可以在PATH的某个地方创建一个foo.cmd,它可以作为一个别名。记住,与Linux/OSX shell不同,cmd文件可以影响环境变量和会话,而不需要source它们。
我有一个cdbin.cmd来导航我,例如:
d:
cd \home\bin
这是一个伪grep grep.cmd
findstr -n %1 %2
在行动中(不管排序/+2 /+10是什么意思)
D:\home\work\fb440.dumper>grep class *.py | sort /+2 /+10
dumper2.py:18:class PrettySafeLoader(yaml.SafeLoader):
dumper2.py:27:class Comparator(object):
dumper2.py:3:class module_settings:
linker2.py:5:class module_settings:
dumper2.py:65:class DataCompProcessor(object):
dumper2.py:69:class DataCompTextRenderer(DataCompProcessor):
dumper2.py:76:class DataComparator(object):
``` 。