cmd результат команды в переменную

Я хочу сохранить результат команды powershell в переменной cmd как String: powershell -com «(ls | select -Last 1).FullName» . Как это сделать?

CMD не имеет простого способа присвоить вывод команды переменной. Если команда выдает только одну строку, вы можете использовать цикл for

Тем не менее, если команда выдает несколько строк, которые будут захватывать только последнюю строку. Лучшим подходом было бы перенаправить вывод команды в файл, а затем прочитать этот файл в переменную:

Если вам буквально нужен только последний файл в каталоге, вам не нужно запускать PowerShell. Как много CMD может сделать само по себе:

Помните, что вам нужно удвоить символы % при запуске из пакетного файла.

Цикл FOR может предоставить путь к файлу. Если порядок сортировки каталогов по умолчанию не является необходимым результатом, укажите дополнительные ключи командной строки в команде DIR .

В скрипте файла .bat удвойте символы процента в переменных цикла FOR.

Скрипты файла .bat также могут запускать скрипты PowerShell. Рекомендуется не использовать псевдонимы, такие как ls , в сценариях.

Проблема с cmd в том, что я хочу получить полные пути для ПАПКИ НЕ РЕкурсивные. этот каталог /ad/b не дает полных путей и этот каталог /ad/b/s делает это рекурсивно. — stakowerflol 2 часа назад

Это не проблема, вы можете вернуть полный путь к файлу без повторения.

Если вы меняете каталог на путь, который необходимо проверить, он сохраняется в %CD%

Если вам нужен путь для самого скрипта, он хранится в %

Если вы хотите указать аргумент для указания произвольного пути и получить все списки, это будет термин этого аргумента (EG %

Со всеми тремя возможными вариантами вы можете сделать то же самое:

Предварительно добавьте предоставленную переменную к выводу выбранного метода перечисления каталога

Используйте цикл For, чтобы получить имена файлов по этому пути и показать результат с полным путем.

Jenkins_A_Dir.bat

Конечно, вам НЕ НУЖНО устанавливать переменную, такую как _CheckHere

Вместо этого вы можете просто заменить все экземпляры %_CheckHere% на «%

1″, что также отлично работает в приведенных выше примерах.

Хорошо, что если вы просто хотите проверить местоположение, в котором выполнялся скрипт.

Затем либо измените приведенное выше, чтобы использовать SET «_CheckHere=%

dp0″ , либо замените %_CheckHere% на %

Хорошо, но что, если вы не хотите устанавливать переменную, вы хотите, чтобы она использовала текущий рабочий каталог.

Например, команда
Tasklist |Find /I /c «cmd.exe»
Здесь, команда Find ищет в списке процессов количество строк со словом «cmd.exe» и выводит на экран в виде числа

Так вот, вопрос в том, как это число, в данном случае — 2, записать в переменную, которую можно будет использовать дальше в коде.

Анализ результатов работы команды, программы

Анализ результатов работы команд, программ на ошибки при работе

Сокращенная форма проверки ошибки выполнении команды

Для более детальной проверки как правило используют проверку значения переменной errorlevel

Программы могут возвращать различные коды возврата. Иногда документация на эти программы об этом упоминает. Как правило, при нормальном завершении программ код возврата 0.

Анализ возвращаемых значений команд, программ

Для начала — простой пример.

В переменную MYVAR запишется имя компьютера, с которого запущена команда.
Приведено в качестве примера. Так как аналогичный результат можно было получить и более просто (смотрите таблицу Список системных и локальных переменных на странице Общие сведения о командной оболочке).
set MYVAR=%COMPUTERNAME%

Во многих случаях удобно анализировать результат работы одной команды при помощи другой команды.
Это не так страшно, как написано )).
Начнем с несложных примеров.

Здесь результат работы команды ping передается (конвейер) программе find для поиска в них подстроки «TTL».
Проверку доступности ресурса можно осуществить и анализируя код завершения команды ping аналогично приведенному выше примеру с командой copy.

1% :: Remove backslashes SET BUSYDRV=%BUSYDRV:=% :: Check which drive letters aren’t used and :: list them as free drive letters FOR %%A IN (%ALLDRIVES%) DO ( ECHO.%BUSYDRV% | FIND «%%A:» >NUL IF ERRORLEVEL 1 SET FREEDRV=!FREEDRV!,%%A: ) :: Remove leading comma SET FREEDRV=%FREEDRV:

1% :: Display result SET BUSYDRV FOR %%A IN (%BUSYDRV%) DO ECHO %%A BUSY SET FREEDRV FOR %%A IN (%FREEDRV%) DO ECHO %%A FREE ENDLOCAL

Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).

Оцените статью