我如何知道正在执行哪个文件?

我如何知道正在执行哪个文件?

我有两个文件: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

相关内容