我曾经从事bash的工作,并从别名中受益匪浅。Windows命令行中是否有任何等效方法?
我不想模拟Linux环境,因此cygwin不是一个选择。我只需要一些非常长的命令的快捷方式,例如cd a_very_long_path
。
我曾经从事bash的工作,并从别名中受益匪浅。Windows命令行中是否有任何等效方法?
我不想模拟Linux环境,因此cygwin不是一个选择。我只需要一些非常长的命令的快捷方式,例如cd a_very_long_path
。
Answers:
正如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前缀。
您可以为经常使用的命令创建简单的变量“ macros”,但是键入语法有点尴尬,因为在使用“ macro”时需要对其进行扩展。
定义:
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
Microsoft Windows [Version 10.0.17134.648]
/d
标志添加到CD
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
您可以使用Windows使用的相同技巧:例如,设置环境变量(或批处理上下文中的变量),例如,设置环境变量%windir%(以及其他变量),因此您可以
cd C:\Windows\
要么
cd %windir%
相同的。因此,您要做的就是:
set "mydir=C:\very\long\path\to\my\data\"
之后,您可以(无论身在何处)进行操作:
dir %mydir%
要么
cd %mydir%
或任何你想要的。
与Linux不同,在Windows中,别名可以接受参数,并且可以给参数指定在其定义中分配这些参数。
内部内置命令为doskey,这意味着它不是位于其中的外部可执行文件,%SystemRoot%\System32
而是默认情况下cmd.exe
本身位于其中%SystemRoot%
或%Windir%
都指向C:\Windows
文件夹的功能。
Doskey在许多其他事物中定义了别名。在Windows术语中,别名称为宏。要设置别名,请使用
doskey alias=command $1 $2 ... $9 or $* (to catch them all)
这里$1
指向第一个参数,并$*
指向所有参数。
如果只有一个参数可以忽略被视为特殊字符的空格,即分隔符(用于命令),我将始终使用$*
双引号$1
。
此外,您可以在一个单独的文件中定义别名宏,例如说LinuxAliases.macro
然后使用
doskey /macrofile=LinuxAliases.macro
这将加载该文件中定义为当前的所有别名会话只有当你的意思exit
出来的cmd.exe
工艺(又称壳和命令提示符),他们走了。
要拥有永久别名,您可以在名为AutoRun或AutoCommand或类似名称的regedit键中的某个位置键入完整命令,我现在无法回忆起宏文件的内部语法:P
我专门为更改目录做了一个“别名”。基本上,我创建了一个名为的文件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
然后,我可以非常快速地跳转到任何预定义的文件夹。我在这里写了一篇有关该技术的全文。
假设你保持相同的驱动器上,即没有D:
那么cd D:\somedir\
必要。
就我而言,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壳,CMD文件会影响环境变量和会话,无需采购他们。
我有一个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):
您可以使用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
,它将打开记事本,但是如果键入npd test.txt
,将在notepad中打开test.txt。
您可以对所有参数使用$ *,这是另一个示例:
doskey prt=echo $*
如果输入prt This is short.
,输出将是:
这很短。
您可以对多个命令使用$ T,这是一个示例:
doskey newline=echo $1 $T echo $2
如果输入newline Hello and
,输出将是:
你好
和
我希望你明白。
doskey
(不要被它不是旧的MS DOS doskey的名称所欺骗)。使用doskey /?
以获取更多信息。除此之外,恐怕这个问题不在这里了。