如何确定哪个文件正在执行?

我有两个文件:abc.exe和abc.cmd – 沿path的某处。 abc.exe是一个命令行工具。 abc.cmd是abc.exe的一个包装。

当我在命令提示符下input“abc”时,我怎样才能知道哪个文件正在运行,并且它的完整path? 我尝试使用像哪里和哪些,但都需要你input扩展名,告诉你在哪里运行文件。

不要熬夜足够让我拉起进程探索和发现。

只要把一个ECHO命令放在cmd文件中,你就会很快知道。 可能不是你想要的长期,但它会做到这一点。

你有没有尝试过程监控 ? 您可以将filter设置为“path contains'abc'”,然后筛选结果。

CMDbatch file是非常薄弱的​​,但如果你不介意漂stream到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"; } } } 

给定一个无扩展名的文件名,它将列出以当前目录开始的各种可执行文件types(由PATHEXTvariables定义)的顺序,然后以正确的顺序依次searchPATH中的所有可执行文件types。 就我所知,这个search模式是由CMD shell使用的,对于由api调用(如CreateProcess)发起的命令,search行为和顺序将会不同。

这是快速和肮脏的,我没有穷尽testing它,但它处理path与空间和path\没有反斜杠,这是最明显的并发症。 带有正斜杠和引号分号的奇数path将会导致循环。

您可以尝试执行cmd / K abc,它会运行,但会打开命令提示符。 希望这可以帮助。

从早期的记忆(在Microsoft KB35284刷新) ,执行顺序将是EXE,然后是CMD (或早期的BAT)。 因此, 如果您跳过扩展名并且都在本地文件夹中, EXE将优先执行。

有趣的部分是,如果你使用tab-expand, CMD (或BAT )也将被扩展(因为它使用字母sorting)。

如果您对CMDBAT文件差异感兴趣,请查看windows-batch-files-bat-vs-cmd

这是我写的一个小工具,它会告诉你文件的第一个出现在你的path中。 要找出系统上正在运行的是什么,请使用sysinternals中的ProcessExplorer。

例如: where.bat

 @echo off setlocal if "%1"=="" goto USAGE set filename=%1 for %%i in (%filename%) do @echo %%~dp$PATH:i%%i goto EOF :USAGE echo %0 filename :EOF endlocal 

在Windows Vista中有一个名为where.exe的程序。 你可以用它作为where abc 。 它会显示abc的完整path。