Подтвердить что ты не робот

Нечетное ограничение на трубы в batfile на XP

Файл BAT, созданный на моей XP Pro SP3, работает отлично каждый раз.
Устанавливается на другую систему XP [также Pro SP3], она терпит неудачу ( "зависает" ) каждый раз.

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

    echo. | date | find "/" | find "/" | find "/"

Примечание: первые два шага не сокращаются до date /t, потому что некоторые из пользовательских систем являются pre-XP [и, следовательно, не имеют командных расширений]. Также: тщательное тестирование показывает, что date выполняет внутреннюю команду date MS-DOS, а find выполняет ваниль "FIND.EXE, 4 августа 2004 г., 9216", найденный в   "C:\WINDOWS\system32 \" [и идентична копией безопасности в "C:\i386 \" ].

В отказоустойчивой системе каждая команда с 4 или более | s висит на пятом шаге, даже когда - как здесь - программы просты и количество текста, которое они обрабатывают, является незначительным.

Вчера я провел некоторое тестирование в пользовательской системе и обнаружил тонкость, о которой я не знал. Я ввел упрощенную команду [выше] в командной строке. Он потерпел неудачу [ "висел" ], как ожидалось. Однако, когда я перезагрузился и попробовал снова, прежде чем делать что-либо еще (случай, который никогда не будет происходить в нормальной работе пользователя), я получил удар: он работал (т.е. Вывод команды MS-DOS DATE появился, как ожидалось). Это сработало снова. Затем, с третьей попытки, режим отказа снова появился и остался последовательным после этого.
Я подтвердил, что files=40 действует на обе системы и сдался. Мне все еще интересно, но я не могу потратить много времени на небольшой проект для клиента pro bono, анализирующего проблему, для которой у меня есть легкие рабочие задачи.
Спасибо всем за ваши быстрые и полезные ответы.

В исходной системе команды с 4 или более функциями работают правильно независимо от того, какие программы вызывается и сколько текста [по причине] они обрабатывают.

Как только ограничение распознается, существует множество тривиальных обходных решений, поэтому мой вопрос является исключительно одним из любопытства: может ли кто-нибудь предположить, откуда взялся лимит, и существует ли настройка [в XP], которая будет поднимать/устранять ее?

Примечание. Ни HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun, ни HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun не существует в любой системе.

Кроме того: я приношу свои извинения за ответы на комментарии, неоднократно редактируя мой оригинальный пост, но независимо от того, какой браузер я использую для входа в систему, всплывающее сообщение "добавить комментарии" [или то, что оно должно быть] никогда не появляется. Возможно, мое понимание того, что добавление комментария к моему собственному сообщению не требует очков репутации, ошибочно. Однако теперь я вижу, что "show # more comments" тоже не работает.

Наконец: проблема, с которой я сталкиваюсь с этим сайтом [основным симптомом которого является сообщение консоли javascript "Uncaught ReferenceError: StackExchange не определено" ] - это то же, что обсуждалось здесь https://meta.stackexchange.com/info/117730/stack-overflow-onclick-actions-broken около года назад.

4b9b3361

Ответ 1

Используйте символ ^, чтобы избежать специального символа
пример эхо. ^ | date ^ | найти "/" ^ | найти "/" ^ | найти "/"

http://www.robvanderwoude.com/escapechars.php

Ответ 2

Иногда, если что-то в реестре отсутствует, вы должны добавить его вручную, чтобы заставить его работать. Или, получите некоторый расширенный редактор BAT окон, который расширит возможности ваших пакетных script стандартных команд Windows и таких. Что касается этого, они обычно добавляют и превращают ваш пакетный файл в exe, поскольку исполняемый файл является механизмом расширения возможностей. Большинство из них являются условно-бесплатными, но, заметив их спецификации, в этом случае все, что вам нужно, это простой редактор с движком, который извлекает командный файл в каталог temp и выполняет его. Вам, вероятно, не нужно что-то, что сделано для обфускации вашего командного файла.