Сохранить вывод команды в переменную - PullRequest
1 голос
/ 17 ноября 2011

В пакетном файле я пытаюсь получить выходные данные команды и сохранить их в переменной.

Цель моей команды - подсчитать количество папок в определенной папке.

  • Я не могу использовать трюк, предоставленный в этом принятом ответе, потому что мне нужно было бы сделать cd path\to\my\folder, чтобы добраться до текущего каталога.К сожалению, я не могу выполнить эту команду, потому что path\to\my\folder на самом деле является UNC-путем (\\path\to\my\folder), а cd \\some\UNC\path не поддерживается командлетом Windows.
  • Мне известно о это ответ, но я не хочу использовать временный файл.

Поэтому я попытался сделать следующее:

  • Чтобы получить числопапок, которые я использую:

    dir \\path\to\my\folder | find /c "<REP>"
    

    Это работает нормально и возвращает мне номер, как я и ожидал.

  • Чтобы получить выходные данные этой команды в пакетепеременная, я попробовал:

    FOR /F "TOKENS=*" %%i IN ('\\path\to\my\folder | find /c "<REP>"') DO 
    SET value = %%i
    

    Но без успеха сообщение об ошибке было ...

    |было неожиданным.

    ... при выполнении командного файла и ...

    %% i было неожиданным.

    приЯ пытаюсь выполнить команду прямо в командном окне.Я попытался экранировать кавычки вокруг строки <REP> (...find /c ""<REP>""') DO...), но получил ту же ошибку.

Нахожусь ли я на правильном пути, чтобы получить выходные данные в переменной?Что я должен сделать, чтобы устранить сообщение об ошибке?
Или, может быть, есть более простой способ задать вывод команды в переменной?

1 Ответ

4 голосов
/ 17 ноября 2011

Вы можете использовать ответ, который вы впервые упомянули.Вам не нужно cd там, но вы можете использовать pushd, который выделит временную букву диска для путей UNC, которая будет освобождена, когда вы выполните popd.

Итак, по сути:

pushd \\server\path
set count=0
for /d %%x in (*) do set /a count+=1
popd
...