Cmd 将where命令的第一个结果存储到变量中并停止搜索

Cmd 将where命令的第一个结果存储到变量中并停止搜索,cmd,batch-processing,Cmd,Batch Processing,我的C驱动器上有一个特定的文件,我希望能够通过.bat脚本搜索该文件,并将目录更改为包含该文件的文件夹 到目前为止,我所做的是将搜索结果检索到一个变量中: For /f %%i in <'where /R C:\ *testfile.jar'> do set RESULT=%%i 对于do集合结果中的/f%%i=%%i 问题是where命令在找到文件后不会停止,因为它会继续在整个C驱动器中搜索其他类似的文件。但是,在这种情况下,我知道此文件在我的驱动器上只存在一次,因

我的C驱动器上有一个特定的文件,我希望能够通过.bat脚本搜索该文件,并将目录更改为包含该文件的文件夹

到目前为止,我所做的是将搜索结果检索到一个变量中:

    For /f %%i in <'where /R C:\ *testfile.jar'> do set RESULT=%%i  
对于do集合结果中的/f%%i=%%i

问题是where命令在找到文件后不会停止,因为它会继续在整个C驱动器中搜索其他类似的文件。但是,在这种情况下,我知道此文件在我的驱动器上只存在一次,因此如何在找到路径后停止where命令?

我知道在设置变量之前不搜索整个设备的唯一方法是使用PowerShell。cmd
FOR
循环将在执行
DO
块之前完成该命令。PowerShell管道在找到数据时将其推送通过

@ECHO OFF
FOR /F "delims=" %%f IN (' ^
    powershell -NoProfile -Command ^
        "Get-ChildItem -Path 'C:\' -Recurse -Filter '*testfile.jar' -ErrorAction SilentlyContinue |" ^
        "Select-Object -First 1 |" ^
        "ForEach-Object { $_.FullName }" ^
    ') DO (
    SET "FN=%%~f"
)

ECHO "%FN%"

不适用于
where.exe
。这将搜索并输出与通配符匹配的所有文件的列表。您找到此问题的解决方案了吗?没有,我最终搜索了一个子文件夹,知道(唯一)文件将位于其中,但不知道确切路径。因此搜索速度相当快。