2 / 2 / 0
Регистрация: 05.06.2012
Сообщений: 37
1

Перенаправить поток ошибок программы в переменную

19.03.2013, 15:13. Показов 13583. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Требуется перенаправить вывод программы в переменную.
Код
@ECHO OFF
SET a=""
TASKKILL /IM calc.exe 2> file.txt
ECHO a is: %a%
PAUSE
В этом примере я пытаюсь убить процесс калькулятор и вывод ошибок перенаправляю в файл.
Требуется переделать его так, чтобы вывод ошибок шел в переменную а.

Решение с выводом во временный файл и последующим его чтением в переменную не подходит, т.к. доступ к файловой системе на запись запрещен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2013, 15:13
Ответы с готовыми решениями:

Перенаправить все в нужный поток
Пишу почтовик. Вот код главной формы: using System; using System.Collections.Generic; using...

QMediaPlayer::mediaStream() или как перенаправить поток ы QIODevice
Добрый день. Опять я, опять проблема. Мне нужно передавать звуковой поток из файла по сети. Чтобы...

Перенаправить аудио поток с одной карты на другую без проводов
Перенаправить аудио поток с одной карты на другую без проводов. Ситуацыя такая, у меня...

большой поток ошибок
Здравствуйте! Стоит в системе несколько жестких дисков: 1 ST3320620AS (3QF095S9) 2 ST3500320AS...

16
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
19.03.2013, 16:12 2
Вам необходимо использовать конструкцию из данного поста: Коды возврата ошибок (расшифровки ErrorLevel)*
1
2 / 2 / 0
Регистрация: 05.06.2012
Сообщений: 37
19.03.2013, 16:33  [ТС] 3
а текст ошибок как получить?
мне нужен именно он, а не errorlevel.
в данном случае я написал тестовый пример облегченный, чтобы вам была понятнее задача и мне легче тестить.
на самом же деле вместо тасккилл будет другая команда, которая будет выводить произвольное сообщение об ошибке и его errorlevel мне ничего не даст (кроме самого факта ошибки)
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
19.03.2013, 18:55 4
Я и не говорил, что Вам нужен Errorlevel.
Вам нужна только одна строка из того кода.
0
2 / 2 / 0
Регистрация: 05.06.2012
Сообщений: 37
19.03.2013, 22:39  [ТС] 5
Тот пример у меня не запускается.
Пишет непредвиденное появление /f.
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
19.03.2013, 22:45 6
Bash
1
2
3
4
5
@echo off
set u_comm=Ваша команда, например copy a b
for /f "delims=" %%A in ('%u_comm% 1^>nul 2^>^&3') do set StdErr=%%A
echo %StdErr%
pause>nul
1
2 / 2 / 0
Регистрация: 05.06.2012
Сообщений: 37
20.03.2013, 10:44  [ТС] 7
А как убрать ошибку не подскажете?
http://www.safepic.ru/i/a0a0j0X03011q637.png

 Комментарий модератора 
Файлы грузите на форум во избежание их утери на сторонних ресурсах.
В расширенном режиме сообщения скрепка, через которую Вы загружали изображения, еще и выполняет роль выпадающего списка. После того, как вложения загружены, ставим курсор в нужную часть поста и выбираем из этого списка вложение. Там, где стоял курсор, появится номер вложения в тегах [ATTACH].
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
20.03.2013, 13:47 8
Некая ошибка в синтаксисе.
Приложите к Вашему посту бат-файл в архиве.
0
2 / 2 / 0
Регистрация: 05.06.2012
Сообщений: 37
20.03.2013, 13:58  [ТС] 9
Вот
Вложения
Тип файла: rar wewewe (20.03.2013 - 13-56-05).rar (196 байт, 36 просмотров)
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
20.03.2013, 14:46 10
Все верно. У меня правильно отрабатывает. Проблемы с виндой? Порасследуем.

Замените первую строку батника на такую:
Bash
1
Echo. 1>&3 2>&4 3>log.txt 4>&3
Приведите сюда текст из созданного рядом с батником файла log.txt
0
2719 / 1773 / 187
Регистрация: 05.06.2011
Сообщений: 5,132
20.03.2013, 16:25 11
Какие ж-то там есть расширенный и обычный режим cmdшника. Может, оно?
2
2 / 2 / 0
Регистрация: 05.06.2012
Сообщений: 37
20.03.2013, 17:04  [ТС] 12
log.txt
D:\Automatization>set u_comm=taskkill /IM calc.exe
Непредвиденное появление: /f.

D:\Automatization>for /f "delims=" %A in ('taskkill /IM calc.exe 1^>nul 2^>^&3') do set StdErr=%A
Какие ж-то там есть расширенный и обычный режим cmdшника. Может, оно?
пробовал - не помогло
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
20.03.2013, 17:34 13
Точно в начало бат-файла пробовали подставлять? :

Bash
1
SetLocal EnableExtensions
Какая версия операционной системы?
1
2 / 2 / 0
Регистрация: 05.06.2012
Сообщений: 37
20.03.2013, 17:48  [ТС] 14
Вчера ставил в начало батника
SETLOCAL ENABLEDELAYEDEXPANSION
SETLOCAL ENABLEEXTENSIONS
- не сработало.
Подумал: "это не влияет, тут что-то похлеще".

Сегодня поставил - сработало!
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
20.03.2013, 17:52 15
Дык, все же, какая ОСь?
0
2 / 2 / 0
Регистрация: 05.06.2012
Сообщений: 37
20.03.2013, 17:52  [ТС] 16
Windows 7, x32
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
20.03.2013, 18:14 17
Значит отключено через реестр.
Попробуйте изменить значение, чтобы не натыкаться на эти грабли в будущем.

Полностью отключить или включить расширенную обработку на данном компьютере или для конкретного пользователя можно в реестре, в соответствующих нужному контексту разделах [HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Command Processor] и [HKEY_CURRENT_USER \ Software \ Microsoft \ Command Processor].

Параметр "EnableExtensions"=dword:00000001 в этих разделах включает расширения, а "EnableExtensions"=dword:00000000 — отключает, при этом параметры пользователя имеют приоритет над параметрами компьютера
Добавлено через 1 минуту
Установите значение в 1. Перезагрузите компьютер. Затем попробуйте удалить строку SETLOCAL ENABLEEXTENSIONS из батника.
2
20.03.2013, 18:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.03.2013, 18:14
Помогаю со студенческими работами здесь

Перенаправить ввод/вывод программы
Пиш тестирующую систему, и хочу перенаправить ввод/вывод программы из стандартного ввода/вывода в...

Поток ввода без ошибок
В чем состоит задача: нужно организовать ввод вещественных чисел в массив с помощью cin. И нужно,...

Обход защиты от запуска копии программы - как перенаправить заголовок
Есть одна игра, которая запрещает играть в неё сразу с двух аккаунтов, песочницы виртуалки не...

Передать в поток переменную
ThreadStart threadStart = delegate() { matrica1 = Raschet(matrica, n); }; Thread t1 =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru