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

时间:2018-08-29 19:37:11

标签: cmd batch-processing

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

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

    For /f %%i in <'where /R C:\ *testfile.jar'> do set RESULT=%%i  

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

1 个答案:

答案 0 :(得分:0)

我知道在设置变量之前无需搜索整个设备的唯一方法就是使用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%"