Приснилось. Почти вархаммерское.

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

Меня похитили инопланетяне, впрочем, самих инопланетян я не видел, т.к. находился в изолированном помещении, насколько понимаю, тому ще у них другая атмосфера, непригодная для дыхания землян. Существа, которые называют себя Варкаранаи, оказались сверхцивилизацией, ведущей «оперативную деятельность и военные операции» сразу в нескольких галактиках, в т.ч. и в нашей.

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

Следующий кадр.

На меня нахлынула какая-то дикая гамма чувств, ярость, любовь, желание убивать и одновременно защищать. Я клялся в верности неведомым Варкаранаям, а также вообще чему-то большему, прочувствовал великое доверие, оказанное мне, и что такое Честь Варкаранай-Контракторв. Как выяснилось, я даже расплакался во сне, а потом меня будто бы нежно обняли, успокоили и обнадежили. И пообещали корабль.

Следующий кадр.

Мне дали довольно небольшой, по их меркам, корабль. Размером, примерно, с Санкт-Петербург. Из живых существ я на нем вообще был один, других членов экипажа не было, тем не менее, я будто бы чувствовал каждый прибор, каждый механизм корабля, и знал, как всем \этим управлять, причем, так кайфово было, что вообще описать сложно.

А потом я вышел в открытый космос, в скафандре, мягком и удобном изнутри. Отчетливо видел фал, удерживающий меня у корабля. Правда, система безопасности ругалась на то, что я выхожу в космос в опасном месте. Впрочем, как я понимаю, если далеко не улетать, то можно и поплавать в невесомости, если не соваться за защитное поле корабля.

И я увидел пульсар! Невероятно красивый ярко-голубой шар, покрытый черной сетью разломов, его «стробоскоп» периодически светил мне в лицо.

Если бы не защитное поле, то меня и корабль уничтожило бы в мгновение. После этой мысли я проснулся.

ЗЫ. Картинка пульсара просто для иллюстрации, то, что видел во сне, так найти и не смог, даже примерно.

C#, вывод цветного текста на консоль и изменение цвета фона консоли.

Делается очень просто, цветом текста управляет свойство ForegroundColor объекта Console, а цветом фона — свойство BackgroundColor, которые принимают значения из перечисления ConsoleColor.

Например, если установить свойства таким образом:

Console.BackgroundColor = ConsoleColor.DarkGray;
Console.ForegroundColor = ConsoleColor.Green;

то при выводе текста, например, командой:

Console.WriteLine("Demo Text");

мы получим зеленый текст:

Demo Text

на темно-сером фоне.

Всего консоль поддерживает 16 цветов.

Сброс цветовой схемы консоли

Для возврата к цветовой схеме по умолчанию используется метод Console.ResetColor();

Пример

Демонстрационный пример на GitHub (выводит все цвета текста и фона)

Скриншоты

Браузеры для Pentium II/III для процессоров без поддержки инструкций SSE2

Нашел еще одну подборку браузеров для процессоров без поддержки инструкций SSE2, способных работать на старых компьютерах Pentium III (некоторые должны и на Pentium II) под Windows XP.

Продолжая эту тему (копия)

Скачать с Mega.nz

Chrome 33 (Standalone Setup)
Firefox Setup 45.9.0 ESR none SSE2
Firefox Setup 48.0.2 none SSE2
Opera 20.0.1387.91 none SSE2
Chromium 35.0.1870.2 portable

Программа для генерации и чтения QR-кодов для Windows

Преамбула

На самом деле достали эти QR-коды и не только «от модной болезни», но и вообще. Лезут таки изо всех щелей. А лопат идиот-фонов я с собой не ношу, во всяком случае в ГОРФ, они мне тут без надобности, благо есть мягенькое креслице и уютный десктоп с полноценной клавой и мышью, ну или, на на худой конец, ноутбук. А телефон должен звонить и принимать СМС (от банка, о поступлениях на счет). Впрочем, преамбула превращается в минутку ворчания…

Итак, как же генерировать и читать QR-коды на десктопе или ноутбуке под Windows?

Нашел программу CodeTwo QR Code Desktop Reader & Generator.

Возможности программы

+ Работает полностью оффлайн, не требует соединение с Интернетом.
+ Небольшие системные требования (см. ниже)
+ Бесплатная, как для домашнего, так и для коммерческого использования
+ Может генерировать QR-коды
+ Имеется возможность читать и декодировать QR-код с экрана (захват экрана с выделением области)
+ Из буфера обмена
+ С изображений с веб-камеры
+ Из файла

— Не OpenSource

Системные требования

+ Поддерживает версии Windows от Windows XP SP3 до Windows 10
+ Поддерживаются как x86 (32-разрядные), так и 64-разрядные версии ОС
+ Размер на диске 2,5 Мб

Необходим .NET Framework 4.0 или выше.

Скачать

Сайт разработчика

Официальная страница (краткая инструкция на буржуйском, скрины, ссылка на скачивание)

Копия установщика на mega.nz

C#, как сделать транслитерацию. Перевод русской строки в latinitsu.

Преамбула

Думаю, что объяснять, что такое транслит, никому не нужно — это написание русских слов latinskimi bukvami, понадобилось сделать это на C#.

Первая проблема, которая возникла, это то, что четкого стандарта транслитерации нет, к сожалению, кто в лес, кто по дрова. Я находил даже стандарты с мерзкой диакритикой, т.е. всякими кракозяблями над буквами. В общем, для своего примера я выбрал какой-то довольно пожилой телеграфный стандарт (нашел в печатной книжке), благо, если кому-то что-то не нравится, всегда можно подправить в исходнике, тут меня больше интересует сам пример.

Русская буква А Б В Г Д Е Ё Ж
Латинская буква или буквосочетание A B V G D E Yo Zh
Русская буква З И Й К Л М Н О
Латинская буква или буквосочетание Z I J K L M N O
Русская буква П Р С Т У Ф Х Ц
Латинская буква или буквосочетание P R S T U F Kh Ts
Русская буква Ч Ш Щ Ъ Ы Ь Э Ю
Латинская буква или буквосочетание Ch Sh Shch » Y E Ju
Русская буква Я
Латинская буква или буквосочетание Ja

Вторая проблема — этот стандарт проблематично использовать для транслитерации URL или имен файлов, надо что-то делать с пробелом (который в именах файлов и URL смотрится, как говно), так что в другом варианте таблицы, для замены Ъ, Ь и пробела, был выбран знак подчеркивания (_).

Класс, для транслитерации символов и строк

Создаем новый класс Translit:

public class Translit
{
	
}

В класс Translit добавляем словарь (Dictionary), который, в качестве ключа, будет использовать тип char (русскую букву), а в качестве значения string, содержащий ее латинский эквивалент. Думаю, ясно, почему string — некоторые русские буквы передаются латинскими буквосочетаниями:

private Dictionary<char, string> TranslitDict = new Dictionary<char,string>();

Теперь надо создать две функции, которые будут заполнять словарь нужными значениями.

Для общего случая:

private void FormDictStandart()
{
    TranslitDict.Clear();

    //Заглавные буквы (общий случай)
    TranslitDict.Add('А', "A");
	
    //часть кода вырезана для экономии места
    
    TranslitDict.Add('Ъ', "''");
    TranslitDict.Add('Ы', "Y");
    TranslitDict.Add('Ь', "'");
    TranslitDict.Add('Э', "E");
    TranslitDict.Add('Ю', "Ju");
    TranslitDict.Add('Я', "Ja");

    //строчные буквы (общий случай)
    TranslitDict.Add('а', "a");
	
    //часть кода вырезана для экономии места
    
    TranslitDict.Add('ъ', "''");
    TranslitDict.Add('ы', "y");
    TranslitDict.Add('ь', "'");
    TranslitDict.Add('э', "e");
    TranslitDict.Add('ю', "ju");
    TranslitDict.Add('я', "ja");
}

И для «режима совместимости»:

private void FormDictCompat()
{
    TranslitDict.Clear();

    //Заглавные буквы (режим совместимости)
    TranslitDict.Add('А', "A");
	
    //часть кода вырезана для экономии места
    
    TranslitDict.Add('Ъ', "_");
    TranslitDict.Add('Ы', "Y");
    TranslitDict.Add('Ь', "_");
    TranslitDict.Add('Э', "E");
    TranslitDict.Add('Ю', "Ju");
    TranslitDict.Add('Я', "Ja");

    //строчные буквы (режим совместимости)
    TranslitDict.Add('а', "a");
	
    //часть кода вырезана для экономии места
    
    TranslitDict.Add('ъ', "_");
    TranslitDict.Add('ы', "y");
    TranslitDict.Add('ь', "_");
    TranslitDict.Add('э', "e");
    TranslitDict.Add('ю', "ju");
    TranslitDict.Add('я', "ja");
	
    //пробел
    TranslitDict.Add(' ', "_");
}

Теперь необходимо добавить в класс свойство, чтобы переключать режимы и переформировывать словарь. Классически, добавляем внутреннюю переменную compatibility типа bool, для хранения текущего значения свойства, и само свойство, при изменении которого, будет вызываться одна из вышеуказанных функций:

private bool compatibility = false;
  
public bool Compatibility
{
    get
    {
        return compatibility;
    }
    set
    {
        if (value)
        {
            FormDictCompat();
            compatibility = true;
        }
        else
        {
            FormDictStandart();
            compatibility = false;
        }
    }
}

Добавим простой конструктор класса:

public Translit(bool Compat)
{
    Compatibility = Compat;
}

Транслитерация символа

Алгоритм простой: надо проверить, содержится ли переданный в функцию символ в словаре, если да, то выдать соответствующее значение, если нет (т.е. передана латинская буква, знак препинания, цифра, или что-то иное), выдать этот же символ, преобразованный в строку:

public string TranslitChar(char Rus)
{
    if (TranslitDict.ContainsKey(Rus))
    {
        return TranslitDict[Rus];
    }
    else
    {
        return Rus.ToString();
    }
}

Проверка строки на наличие русских символов.

Это я уже делал в маленьком примере (копия), так что просто вставлю функции оттуда:

//русские буквы
public static bool ContainsRus(string TestString)
{
    return
        Regex.IsMatch(TestString, @"[а-я]", RegexOptions.IgnoreCase);
}

//русские буквы и пробелы
public static bool ContainsRusOrSpace(string TestString)
{
    return
        Regex.IsMatch(TestString, @"[а-я]|\s", RegexOptions.IgnoreCase);
}

Транслитерация строки

1. Проверяем, содержит ли строка русские буквы или русские буквы и пробел, в зависимости от режима работы.

Примечание: Сильно работу алгоритма это замедлить не должно, а вот ускорить, в случае какой-нибудь гигантской строки может, т.к. Regex, который используется в функции поверки, работает со строкой напрямую в памяти, средствами .NET.

Если искомого нет — возвращаем оригинальную строку.

2. Проходимся по символам строки, транслитерируем их, возвращаем новую строку.

Примечание: Для формирования новой строки лучше использовать StringBuilder вместо простой конкатенации, опять же, на случай, если строка может оказаться гигантской. См. подробности в статье на Хабре

public string TranslitString(string Rus)
{
    string sBuf = "";
    StringBuilder sb = new StringBuilder();

    if (compatibility)
    {
        if (!ContainsRusOrSpace(Rus)) return Rus;
    }
    else
    {
        if (!ContainsRus(Rus)) return Rus;
    }

    for (int i = 0; i < Rus.Length; i++)
    {
        if (TranslitDict.ContainsKey(Rus[i]))
        {
            sBuf = TranslitDict[Rus[i]];
        }
        else
        {
            sBuf = Rus[i].ToString();
        }
        
        sb.Append(sBuf);
    }

    return sb.ToString();
}

Исходники

Класс Translit на GitHub
Тестовый пример на GitHub

C#, как присвоить char значение null или его аналог.

Пост из серии спрашивали — отвечаем.

Значение null переменной типа char не присвоить никак, т.к. char относится к «простым» (в другой литературе «базовым») типам, которые не могут принимать значение null, и обязательно должны быть проинициализированы каким-то значением.

Но иногда надо объявить переменную типа char, с которой работать будем потом, например, в цикле. Как тогда быть? Можно инициализировать переменную символом с кодом 0 (0x00). Проще всего сделать это так:

char Chr = '\0';

Но можно и другими способами:

char Chr = char.MinValue;
char Chr = (char)0;

Или даже с извращениями:

char Chr = "\0".ToCharArray()[0];

Или с извращениями, используя большой и тяжелый класс Convert, который лучше избегать, если он не очень нужен:

char Chr = Convert.ToChar(0);

C#, регулярное выражение для кириллицы.

Понадобилось тут узнать, содержит ли строка кириллицу. Решение через Regexp.

Кириллица

[а-я]

Кириллица или пробел

[а-я]|\s

Пример использования

Подключаем System.Text.RegularExpressions:

using System.Text.RegularExpressions;

Код:

public static bool ContainsRus(string TestString)
{
    return
        Regex.IsMatch(TestString, @"[а-я]", RegexOptions.IgnoreCase);
}

public static bool ContainsRusOrSpace(string TestString)
{
    return
        Regex.IsMatch(TestString, @"[а-я]|\s", 	RegexOptions.IgnoreCase);
}

Код на PasteBin

Анализ и распаковка установщика QTInstaller вручную. С помощью HEX-редактора и такой-то матери.

Преамбула

Понадобилась мне одна программка, которая, почему-то не захотела ставиться на мою систему, причем не захотела без всяких ошибок и вылетаний. Инсталлятор просто висел на 1% и дальше двигаться не хотел. Зная, что поддержка винды у этой софтины зависит исключительно от бодуна разработчиков (то они винду вообще не поддерживали, потом прошлая версия прекрасно ставилась и работала, а тут вдруг опять нет), решил я в софтине поковыряться, небось, софтина-то работает, а инсталлятор кривой. Но о том, как я возился с софтиной, напишу как-нибудь позже. А тут будет такой простенький заметк про реверсинг инсталлятора.

Определение инсталлятора

Я уже как-то упоминал (копия), что инсталляторов и упаковщиков есть туева хуча на свете, и для начала надо определить, с каким именно инсталлером мы имеем дело. Для этого воспользуюсь программкой Detect It Easy (DiE), которая по своей базе сигнатур может определять тип экзешника, чем он упакован, чем скомпилирован, а если это инсталлятор — определить и его тип. Программка работает примерно также, как антивирусный сканер, определяя по сигнатурам, с чем мы имеем дело. Благо, почти все упаковщики, компиляторы или сборщики инсталляционных пакетов, так или иначе оставляют свою сигнатуру в файле.

Итак, скармливаю DiE исследуемый инсталлятор.

Видим тип — QT installer.

Об автоматической распаковке и дальнейших мыслях

Естественно, о ней я и подумал сразу же, не изобретать же велосипед, до нас его более умные люди изобрели. А не тут-то было! Автоматического распаковщика не нашел, так что стал думать… Qt проект открытый, значит, скорее всего, они особо не заморачивались, и инсталлятор представляет из себя самораспаковывающийся архив, который по структуре выглядит как-то так, как выглядят самораспаковывающиеся архивы RAR WinZip или 7Zip — в начале файла EXE-модуль, а после него данные, которые EXE-модуль распаковывает:

В принципе, что я иду верным путем, можно было понять из главного окна DiE, тот недвусмысленно сообщал про overlay (оверлей), в котором находятся QT installer data, т.е. данные QT-установщика.

Далее под катом

Инструменты

Detect It Easy (DiE):

На Exe-Lab
На Mega.nz

qresExtract:

Binary for Windows x86
Sources

WinHex 19.9:

Скачать с rutracker.org
Ссылка на Torrent-файл

Niet, Molotoff, клип от студии Психозмультфильм

Когда-то сто лет назад один из друзей его даже размещал на только что появившемся Ютубе (по просьбе [info]rutopist@lj), но теперь уж не той записи, и того ролика найти нельзя. А вот флешка нашлась — конвертнул в экзешник, кому надо — берите. Песня почему-то без третьего куплета, но это косяк авторов оригинального ролика.

Скачать оригинал можно на Mega.NZ (RAR: SWF+EXE)

Установка аналога apt-get в Cygwin

У Cygwin есть свой пакетный менеджер, встроенный, собственно, в установщик. Однако, если надо установить что-нибудь небольшое, то выходить из консоли и запускать инсталлятор лень. Можно установить аналог убунтовского apt-get.

1. В установщике сначала устанавливаем wget, если раньше этого не сделали (в окне мастера со списком пакетов выбираем Full [1]) и в поиске[2] вводим wget. Выбираем последнюю версию в столбце New[3].

Картинка в полном разрешении

2. Скачиваем скрипт apt-cyg (в консоли Cygwin):

wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg

3. Даем скрипту права на исполнение:

chmod +x apt-cyg

4. Перемещаем скрипт в /usr/local/bin:

mv apt-cyg /usr/local/bin

Пользоваться apt-cyg так же, как убунтовским apt-get. Все зависимости от устанавливаемого пакета подтянутся автоматически. Например, можно установить mc:

apt-cyg install mc

После того, как скрипт отработает, запускаем:

mc

ФАНФАРЫ!

Ошибка при установке Сygwin, Cygwin не видит списка репозиториев.

И не может скачать пакеты с репозиториев.

Преамбула

Оказался я тут недавно на одной винде, без доступа к Linux, а Linux-овое окружение срочно потребовалось, погуглил, решил поставить Cygwin, а не тут-то было. Скачиваю инсталлятор, запускаю, а он не видит списка зеркал:

При попытке добавить зеркало вручную, скачивания все равно не происходит.

Как пофиксить

1. Заходим в Свойства браузера (Свойства: Интернет) через Панель управления или Пуск —> Выполнить (Win+R) и вводим и запускаем inetcpl.cpl.
2. Переключаемся на вкладку Дополнительно
3. Ставим галочки напротив пунктов Использовать TLS 1.1 и Использовать TLS 1.2

Готово

Список зеркал:

Список пакетов для установки:

ЗЫ. Пишут, что на некоторых системах не помогает, точнее помогает только после обновления IE и установки кумулятивного обновления для Windows 7 (копия)

Оффлайновые (кумулятивные) обновления для Windows.

Лично я все обновления винды всегда отрубал, отчасти из-за того, что оно часто бывало не совсем лицензионным (от откровенно крякнутых, до кастомных сборок), а отчасти от того, что обновления от M$ «не все одинаково полезны». Некоторые крашили систему, причем внезапно, некоторые делались исключительно для какой-нибудь гадости, как принудительная вакцинация переход с Win7 на Win10

Но, обновления бывают и полезными, от всяких затычек дыр, типа которых (дыр) использовали вирусы WannaCry и NotPetya, до обновления корневых сертификатов.

Так как же получить полезные обновления, но пропустить вредные?

Я уже как-то упоминал сайт Simplix’а. Товарищ аккуратно следит за всеми выходящими обновлениями для Windows и формирует кумулятивные (общие) пакеты обновлений, которые можно накатывать на свежую систему, желательно, с предварительно отключенным автообновлением, чтоб до кумулятивного не попала всякая копирастическая дрянь.

Не реклама. Я сам уже 3 года пользуюсь его пакетами обновлений на нескольких десятках машин, где установлены Windows 7 и даже Windows XP. Сбоев после обновления Simplix еще не бывало.

И еще это бывает полезно там, где интернета нет, или он совсем медленный. Скачал заранее и припер на флешке.

Для XP он уже не формирует пакет обновлений, т.к. обновления окончательно перестал выпускать сам M$, но последний пакет хранится на сайте. Без зазрения совести, его можно назвать Windows XP SP4! Дембельский аккорд уходящей ОС.

Ссылки

Сайт Simplix
Кумулятивные обновления для Windows XP SP3 (новые выходить перестали)
Кумулятивные обновления Windows 7 (обновляются)

Запись из BAT/CMD-файла в STDERR.

Небольшой пост из серии спрашивали — отвечаем.

Примечание: это работает только в версиях Windows, где командный процессор умеет в расширенную обработку команд, т.е., начиная с Windows 2000.

Расширенная обработка команд по умолчанию включена в Windows Server 2003/Windows XP, но может быть отключена через Реестр, так что для совместимости лучше ее включить явно:

SetLocal EnableExtensions

Команда echo по умолчанию выводит на STDOUT, т.е., например, команда:

echo I write to STDOUT

Выведет текст I write to STDOUT на STDOUT, да на мне капитанская фуражка 🙂

Для вывода текста на STDERR необходимо использовать переопределение вывода, синтаксис которого похож на аналогичный синтаксис в Linux, т.е. в современных Windows тоже есть три канала ввода/вывода, с номерами, аналогичными Linux, т.е.:

1STDOUT
2STDERR
3STDIN

Стандартные потоки

Переопределяется вывод на STDERR конструкцией 1>&2, т.е. команда

echo I write to STDERR 1>&2

Выведет текст I write to STDERR на STDERR.

BAT-файл writeto.bat целиком:

@echo off
SetLocal EnableExtensions
rem This BAT file write in stdout and stderr

echo I write to STDOUT
echo I write to STDERR 1>&2

Проверка

Для проверки работы BAT-файла можно создать тестовый BAT-файл, который будет вызывать файл writeto.bat и перенаправлять потоки вывода STDOUT и STDERR в текстовые файлы.
Содержимое файла writeto_test.bat:

@echo off
SetLocal EnableExtensions
rem This BAT file test for writeto.bat

call writeto.bat 1>_stdout.txt 2>_stderr.txt

Данный файл надо создать в каталоге с writeto.bat.

После запуска файла writeto_test.bat в текущем каталоге появятся файлы _stdout.txt и _stderr.txt со следующим содержимым:

_stdout.txt:
	I write to STDOUT

_stderr.txt:
	I write to STDERR

ФАНФАРЫ!

Пример на GitHub

HUILO.EXE: Не дай Украине остаться без газа!

Пересобрал в экзешник прикольную старую флешевскую игрушку, как раз на злобу дня.

Правила простые — кидайтесь яйцами в Хуйло, и не забывайте закрывать вентили, которые Хуйло успело открутить (кликом по ним).

Скачать с Mega.NZ (RAR: SWF+EXE)

OT VINTA — Не мала баба клопоту…

Спрашивали — отвечаем. Да, я знаю эту песню и люблю ее, как очень многое из украинского рока (в данном случае — рокабилли).

Есть ютубная версия:

Прямая ссылка: https://youtu.be/u7DhIEm6BDI

Но для моих дорогих подпизчиков мне удалось сохранить самую первую версию клипа во Flash, которая откроет все его грани в УльтраHD-качестве, и да, вряд ли, за давностью лет, она сохранилась у самих Ot Vinta.

Скачать SWF+EXE с Mega.NZ

БрокаЦентр — ДЕрьМО [Full album, 2003]

Прямая ссылка https://youtu.be/3ch8qdiOXB0:

Tracklist:

00:00 — Хой!
03:40 — Сыпь, гармоника (стихи С. Есенина)
06:00 — Рожь
08:29 — Ботинки и пиво
10:24 — Мой друг
12:08 — Ода конопле
13:33 — Пьяница (стихи С. Есенина)
16:41 — Бои без правил (skinhead music)
20:41 — Настёна

На Realrock/Realmusic

Альбом на MEGA.NZ (RAR and MP3)

ЗЫ. Красно-черную в хорошем качестве не нашел, но может чего другое М.В. зайдет, ИМХО, так «Хой!» годная. Или «Бои без правил». Ну «Ода конопле» должна Глебу зайти.

C#, как записать в STDERR сообщение об ошибке из консольного приложения.

Пост из серии спрашивали — отвечаем.

Итак, как в C# записать в STDERR. STDERR — это стандартный поток вывода для сообщений об ошибках, туда правильно организованные консольные приложения отправляют, собственно, сообщения об ошибках. Отправить в STDERR сообщение можно с помощью объекта Console.Error:

Console.Error.WriteLine("Write to STDERR.");

Код тестового приложения

static void Main(string[] args)
{
    Console.WriteLine("Write to STDOUT.");
    Console.Error.WriteLine("Write to STDERR.");
}

Проверка

Для проверки можно создать BAT-файл, вызывающий тестовое приложение и переопределяющий (копия) вывод со стандартных потоков в файлы stderr_.txt и stdout_.txt. stderr и stdout являются зарезервированными системными именами, потому к именам файлов надо что-то добавить, знак _ в данном случае:

Экран при выполнении тестового приложения:

Z:\...\write2stderr\write2stderr\bin\Debug>write2stderr.exe
Write to STDOUT.
Write to STDERR.

При выполнении BAT-файла экран останется пустым, но в директории с файлом появятся два файла stderr_.txt и stdout_.txt со следующим содержимым.

stderr_.txt:
	Write to STDERR.

stdout_.txt:
	Write to STDOUT.

Пример на GitHub

Исходник
Тестовый BAT-файл
BAT-файл и скомпилированный EXE