Renoz
@Renoz
В поисках истины

Как выполнить команды CMD одной строкой?

Скрипт
set /a M=%NUMBER_OF_PROCESSORS%/2
echo %M% > 1.txt

Выполняется, а если попытаться одной строкой:
set /a M=%NUMBER_OF_PROCESSORS%/2 & echo %M% > 1.txt

Пишет в 1.txt "Режим вывода команд на экран (ECHO) отключен."
Как заставить работать одной строчкой?
  • Вопрос задан
  • 715 просмотров
Решения вопроса 1
wisgest
@wisgest
Не ИТ-специалист
Переменные окружения полностью поставляются в составной команде до её выполнения (чтобы это увидеть можно не отключать режим вывода команд):
set a=1
set a=2& echo %a%

или
set a=1
(
 set a=2
 echo %a%
)

— выведет 1.

Для отложенного раскрытия переменных используйте
set /a M=%NUMBER_OF_PROCESSORS%/2 & echo !M!> 1.txt

— при этом перед этим в командном файле должна присутствовать команда
setlocal enabledelayedexpansion
или cmd.exe должен быть запущен с ключом /v или режим отложенного раскрытия переменных по умолчанию должен быть задан в реестре (см. set /?,setlocal /?, cmd /?).

Для отложенного раскрытия переменных, даже если соответствующий режим не включен, можно также воспользоваться командой call:
  • в командных файлах
    set /a M=%NUMBER_OF_PROCESSORS%/2 & call echo %%M%%> 1.txt

  • вне командных файлов
    set /a M=%NUMBER_OF_PROCESSORS%/2 & call echo ^%M^%> 1.txt


Кстати. В арифметическом присваиванииset /a для отложенного раскрытия переменных их можно записывать не как %var% или !var!, а просто var:
set /a M = NUMBER_OF_PROCESSORS / 2
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev
software engineer
SETLOCAL EnableDelayedExpansion & set /a M=%NUMBER_OF_PROCESSORS%/2 & echo !M!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы