Сохранить первый результат команды where в переменную и прекратить поиск - PullRequest
0 голосов
/ 29 августа 2018

У меня есть определенный файл на диске C, и я хочу с помощью скрипта .bat найти этот файл и изменить каталог на папку, содержащую этот файл.

То, что я имею до сих пор, - это получение результата поиска в переменную:

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

Проблема заключается в том, что команда where не останавливается после нахождения файла, поскольку продолжает поиск на всем диске C других похожих файлов. Тем не менее, в этом случае я знаю, что этот файл существует только один раз на моем диске, так как я могу остановить команду where после нахождения пути?

1 Ответ

0 голосов
/ 30 августа 2018

Единственный способ, которым я знаю, сделать это без поиска по всему устройству до установки переменной, это использовать 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%"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...