【发布时间】:2013-05-08 04:26:10
【问题描述】:
我从这篇文章中得到了一个有用的提示:https://stackoverflow.com/a/374363/151453,但被 doskey 的特殊字符困扰。
(环境:Windows 7 和 Windows XP)
使用 Visual C++ 命令行,我们有 env-vars INCLUDE 和 LIB。所以有了这个doskey宏,
doskey whichinclude=for %i in ($1) do @echo.%~$INCLUDE:i
我们可以很容易地找出哪个.h在哪个INCLUDE目录中最先找到,真的很方便。
但是,LIB 这个技巧失败了。 我不能简单地编写如下宏:
doskey whichlib=for %i in ($1) do @echo.%~$LIB:i
打电话给whichlib winsock32.lib,它喷出The system cannot find the file specified.
我启动 Procmon 来了解会发生什么,它揭示了:
所以我意识到$L 对doskey 有特殊含义,运行时它被替换为当前驱动器号。
尝试双倍美元(@echo.%~$$LIB:i),还是不行,Procmon 报告 CMD 访问C:\echo。
有人能帮帮我吗?
我的doskey书签:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/doskey.mspx?mfr=true
【问题讨论】:
-
与其尝试让它作为 doskey 别名工作,不如将其设为
whichlib.cmd单行批处理文件:@for %%i in (%1) do @if NOT "%%~$LIB:i"=="" @echo %%~$LIB:i -
为了将来的参考,我认为大多数人更喜欢从控制台会话中复制粘贴 sn-ps 作为文本而不是图像。将文本格式化为代码通常效果很好。
-
嗯,我明白了。我用截图来表明我不是单纯的想问我的问题,截图可以避免意外的复制粘贴错误,最终在视觉上很吸引人。
-
我不知道为什么从控制台窗口复制/粘贴比粘贴屏幕截图更容易出错,文本通常比屏幕截图更容易阅读(特别是对于可能有视力的读者问题),就像我说的那样,有时将示例粘贴到编辑器中可以进行额外的分析或测试。