【问题标题】:In a windows .bat file, how do i find the path to an arbitrary file and then write this to a variable在 Windows .bat 文件中,我如何找到任意文件的路径,然后将其写入变量
【发布时间】:2012-04-09 20:28:54
【问题描述】:

例如,我将提供一个文件名,并且我希望脚本在计算机中搜索该文件并返回变量的路径。伪调用是:

设置 pathToMyFile = SomeSearchFunction(myFileToSearchFor.ext)

谢谢

【问题讨论】:

  • 对单个文件很容易做到。如果找到多个文件,你想做什么?

标签: file search variables batch-file return


【解决方案1】:

dir /b /s "c:\myFileToSearchFor.ext" 将列出该文件在 C: 驱动器中的每一次出现,包括完整的路径信息。

该文件可能存在于多个位置。

此批处理命令会将变量设置为最后找到的位置:

for /f "delims=" %%F in ('dir /b /s "c:\myFileToSearchFor.ext"') do set "pathToMyFile=%%~dpF"

此批处理脚本会将变量设置为第一个找到的位置:

for /f "delims=" %%F in ('dir /b /s "c:\myFileToSearchFor.ext"') do (
  set "pathToMyFile=%%~dpF"
  goto :foundIt
)
:foundIt

【讨论】:

    【解决方案2】:

    据我所知,没有任何功能/程序可以执行此操作。如果您需要效率,您可以编写一个程序,对所有目录进行花哨的树搜索。但是,我确实找到了批量解决方案!

    @echo off
    for /r "C:\somebasepath" %%i in (*) do (
    if "%%~nxi" EQU "%1" (
    echo %%i
    break
    )
    )

    将要查找的文件作为第一个参数传递给批处理文件。但是如果它在一个很深的目录中,这是非常非常慢的。

    【讨论】:

    • 您应该 (1) 将 break 更改为 goto :eof 或类似名称 (2) 使用 if 命令的 /i 选项。
    • 另外,您可能想要参数化基本路径。您可以使用for /r "%~dp1" %%a in (*),然后检查if /i %%~nxa==%~nx1
    猜你喜欢
    • 1970-01-01
    • 2016-09-28
    • 2018-01-10
    • 1970-01-01
    • 2011-02-26
    • 2012-07-02
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    相关资源
    最近更新 更多