我有两个文件:abc.exe 和 abc.cmd - 都位于某条路径上。abc.exe 是一个命令行实用程序。abc.cmd 是 abc.exe 的包装器。
当我在命令提示符中输入“abc”时,如何确定正在运行哪个文件以及它的完整路径?我尝试了 where 和 which 之类的实用程序,但两者都要求您输入扩展名来告诉您文件从哪里运行。
两者都没有停留足够长的时间让我启动进程资源管理器并找出原因。
答案1
只需在 cmd 文件中输入 ECHO 命令,您就会很快知道。这可能不是您长期想要的,但对于此目的来说它可以做到。
答案2
你有没有尝试过进程监控? 您可以将过滤器设置为“路径包含‘abc’”,然后筛选结果。
答案3
CMD 批处理文件在这方面相当弱,但如果你不介意使用 Perl 的话。
$filename=shift() or die ("Enter a filename\n");
@extensions = split(/\;/,$ENV{PATHEXT});
@paths = (".",split(/\;/,$ENV{PATH}));
foreach $path (@paths) {
$path =~ s/\\?\s*$/\\/;
foreach $ext (@extensions) {
if (-e $path.$filename.$ext) {
print $path.$filename.$ext."\n";
}
}
}
给定一个无扩展名的文件名,它将列出各种可执行文件类型(由 PATHEXT 变量定义)的查找顺序,从当前目录开始,然后按正确顺序在 PATH 中搜索所有可执行文件类型。据我所知,此搜索模式是 CMD shell 使用的搜索模式,对于由 API 调用(例如 CreateProcess)启动的命令,搜索行为和顺序将有所不同。
这个方法既快捷又粗糙,我还没有进行过详尽的测试,但它可以处理带有空格的路径和带有\而没有尾部反斜杠的路径,这是最明显的问题。带有正斜杠和引号分号的奇数路径将使它陷入循环。
答案4
来自早期的记忆(刷新于微软 KB35284)执行顺序为 EXE,然后是 CMD(或早期的 BAT)。因此,如果你跳过扩展并且都在本地文件夹中,意志EXE
优先并执行。
有趣的是,如果您使用 tab-expand,那么CMD
(或BAT
) 也将被扩展(因为它使用字母顺序)。
CMD
如果你对文件BAT
差异查找感兴趣Windows 批处理文件 bat 与 cmd