Cmd 如何解决doskey的特殊角色,如$L

Cmd 如何解决doskey的特殊角色,如$L,cmd,doskey,Cmd,Doskey,我从这篇文章中得到了一个有用的提示:,但被doskey的特殊角色所困扰 环境:Windows 7和Windows XP 使用Visual C++命令行,我们有EVVARS的包含和LIB。所以用这个doskey宏 doskey whichinclude=for %i in ($1) do @echo.%~$INCLUDE:i 我们可以很容易地找到哪个.h首先在哪个INCLUDE目录中找到,真的很方便 然而,对于LIB,这个技巧失败了。我不能简单地编写如下宏: 调用whichlib winsock

我从这篇文章中得到了一个有用的提示:,但被doskey的特殊角色所困扰

环境:Windows 7和Windows XP

使用Visual C++命令行,我们有EVVARS的包含和LIB。所以用这个doskey宏

doskey whichinclude=for %i in ($1) do @echo.%~$INCLUDE:i
我们可以很容易地找到哪个.h首先在哪个INCLUDE目录中找到,真的很方便

然而,对于LIB,这个技巧失败了。我不能简单地编写如下宏:

调用whichlib winsock32.lib,系统将无法找到指定的文件

我启动Procmon是为了知道会发生什么,它显示:

所以我意识到$L对doskey有特殊的意义,它在运行时会被当前的驱动器号替换

试试double dollar@echo.%~$$LIB:i,仍然不工作,Procmon report CMD正在访问C:\echo

能有人帮我一下吗


我的doskey book mark:

我同意Michael Burr的评论-使用批处理文件可能会更好。我通常不使用DOSKEY宏,因为它们不在批处理文件中工作,所以这似乎是毫无意义的。在我看来,如果命令在命令行上工作,那么它也应该在批处理文件中工作

但是。。。你可以做你想做的事:


$只有在后跟对DOSKEY有特殊意义的字符时才具有特殊意义。$L被解释为,而不是试图让它作为doskey别名工作,只需将其设置为whichlib.cmd一行批处理文件:@for%%i in%1 do@if NOT%%~$LIB:i=@echo%%~$LIB:i,我想大多数人更喜欢将控制台会话中的复制粘贴片段作为文本而不是图像。将文本格式化为代码通常效果很好。我明白你的意思了。我使用屏幕截图来表明我不是通过构思来要求我的任务,而屏幕截图可以避免意外的复制粘贴错误,最终它在视觉上很吸引人。我不确定为什么从控制台窗口复制/粘贴比粘贴屏幕截图更容易出错,文本通常比屏幕截图更容易阅读,特别是对于可能有视力问题的读者,正如我所说,有时将示例粘贴到编辑器中可以进行额外的分析或测试。非常好的答案和解释,已验证!我以前用命令doskey/macrofile=F:\chjconfig\chjmacro.txt加载我的doskey宏,现在我用chjmacro.txt编写,它的LIB=代表$1 do@echo%~$^LIB:I中的%I,工作起来很有魅力。当然,最好在echo后面加一个点,即,$1 do@echo.%~$^LIB:I中的%I,这样当找不到匹配的文件时,echo不显示任何内容,而是嘟囔echo已打开@JimmChen-我知道它看起来不对,但ECHO是唯一完全可靠的变体。回响在一些模糊的场景中可能会失败。
doskey whichlib=for %i in ($1) do @echo.%~$LIB:i
doskey whichlib=for %i in ($1) do @echo(%~$^^LIB:i