Это обычная первая идея, потерпит неудачу
(commandToExecute) & >"file.txt" echo %errorlevel%
Проблема заключается в том, что полная командная строка анализируется и затем выполняется. Во время фазы анализа все операции чтения переменных удаляются из заменяемой команды значением, хранящимся внутри переменных, перед началом выполнения команды.
Это означает, что одна строка не может изменить переменную и получить измененное значение, поскольку в выполненной команде нет операции чтения.
примечание: в то время как это не так, то это синтаксический анализ/заменить поведение влияет на полную линию при чтении, но и ко всем линиям внутри блока, то есть, все линии заключены в круглые скобки. Когда выполнение достигает блока кода, все строки в блоке считываются, все операции считывания переменных внутри блока заменяются, а затем запускается исполняемая команда (ы).
Выполненная команда реален (supossing Равен 0 до исполнения)
(commandToExecute) & >"file.txt" echo 0
Обычный способ борьбы с ним, чтобы включить замедленное расширение. Это позволяет вам изменить, где требуется синтаксис, используемый для доступа к переменной от %var%
до !var!
. Это указывает парсеру, что подстановка переменной/значения должна быть отложена до тех пор, пока команда не будет выполнена, а не при анализе строки. Это делается с помощью команды setlocal enabledelayedexpansion
.
Но эта команда не действует в командной строке, только в пакетных файлах. В командной строке необходимо запустить экземпляр cmd
с помощью переключателя /v
, чтобы включить замедленное расширение. Если вы начинаете свой cmd
экземпляр с замедленным расширением вы можете использовать
(commandToExecute) & >"file.txt" echo !errorlevel!
Но с поддержкой отсроченным расширения, !
в командах becames проблемы, так как анализатор будет видеть его как часть запроса переменного чтения.
У вас есть другая альтернатива.Вы можете написать команду таким образом, чтобы переменный получает не заменяется во время синтаксического анализа, а затем, на выполнении времени силы нового синтаксический анализ команды
(commandToExecute) & >"file.txt" call echo %^errorlevel%
С ^
переменного не распознается, а команда анализируется и выполнен в виде
(commandToExecute) & >"file.txt" call echo %errorlevel%
затем, когда команда call
выполняется новый этап синтаксического анализа вызывается, а затем, после того, как первая команда была выполнена и errorlevel
изменилось, переменная заменяется на линии и правильное значение отправляется в файл.
отредактирован адаптироваться к комментариям - просто тест сессии (извините, испанский языковой стандарт)
W:\41996740>dir /b
W:\41996740>(commandToExecute) & >"file.txt" call echo %^errorlevel%
"commandToExecute" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.
W:\41996740>dir /b
file.txt
W:\41996740>type file.txt
9009
W:\41996740>(dir /b file.txt) & >"file.txt" call echo %^errorlevel%
file.txt
W:\41996740>type file.txt
0
W:\41996740>(dir /b file.exe) & >"file.txt" call echo %^errorlevel%
No se encuentra el archivo
W:\41996740>type file.txt
1
W:\41996740>
Пожалуйста, перепишите свой вопрос в понятное состояние. Я едва получаю то, что вы хотите, за исключением написания 'errorlevel' в файл и что вы терпите неудачу с пакетными файлами. В этом случае я предлагаю показать указанный пакетный файл (ы) или то, с чем вы столкнулись, и немного замаскировать его :) – geisterfurz007
«Я не хочу создавать и сохранять файл BAT». Это сложно понять? :-) Я хочу выполнить много команд CMD «на лету». Так что создание многих файлов BAT - это не лучший способ ... Я так думаю. В каждом случае это только одна команда. И мне нужен уровень ошибок (есть 5 или 6 целых значений, которые я мог бы получить в результате). – Donny73Ger
Тогда ** не создавайте ** и ** не ** сохраняйте пакетный файл! Бум это просто! Но я думаю, что это не было вашим вопросом ... У вас есть несколько способов пойти сюда: набирайте материал каждый раз, когда вам это нужно в командной строке, создайте пакетный файл для двойного щелчка или используйте однострочные команды в переменная среды для более быстрого использования. – geisterfurz007