如何扩展此批处理命令?

时间:2009-03-21 23:53:57

标签: scripting batch-file

我遇到了这段批处理代码。如果输入,它应该找到每个.exe文件的路径。

@Set Which=%~$PATH:1
@if "%Which%"=="" ( echo %1 not found in path ) else ( echo %Which% )

例如,如果将此代码保存在文件which.bat中,然后转到DOS中的目录,则可以编写

which notepad.exe

结果将是:C:\WINDOWS\System32\notepad.exe

但它有点受限,因为它无法找到其他可执行文件。我已经做了一些批处理,但是我没有看到如何编辑这段代码,以便它可以抓取硬盘并返回确切的路径。

2 个答案:

答案 0 :(得分:2)

如果要在驱动器上的任何位置查找可执行文件(或其他文件),而不仅仅是PATH,那么可能只有以下内容才能可靠地运行:

dir /s /b \*%!~x1 | findstr "%1"

但是,它仍然非常缓慢。它不适用于循环目录结构。它可能会吃掉孩子。

使用Windows搜索(依赖于操作系统)或从头开始编写一个完全符合您想要的程序(最近的Windows版本可能会发生循环目录的事情,你可能会更好; afaik他们已经通过默认值)。

答案 1 :(得分:0)

这是用python编写的相同内容:


import os

def which(program,additional_dirs=[]):
    path = os.environ["PATH"]
    path_components = path.split(":")
    path_components.extend(additional_dirs)
    for item in path_components:
        location = os.path.join(item,program)
        if os.path.exists(location):
            return location
    return None

如果只使用参数调用,则只搜索路径。如果使用两个参数调用(第二个是数组),则将搜索其他目录。这是一些片段:


# this will search notepad.exe in the PATH variable
print which("notepad.exe")
# this will search whatever.exe in PATH. If not found there,
# it will continue searching in the D:\ drive and in the Program Files
print which("whatever.exe",["D:/","C:/Program Files"])