我遇到了这段批处理代码。如果输入,它应该找到每个.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
但它有点受限,因为它无法找到其他可执行文件。我已经做了一些批处理,但是我没有看到如何编辑这段代码,以便它可以抓取硬盘并返回确切的路径。
答案 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"])