Как остановить результат командной строки

Здравствуйте.
Подскажите — как остановить результат командной строки ?
Я запускаю от имени администратора bat-файл — тут же мелькает черное окно, которое моментально закрывается и я не успеваю рассмотреть что там написано.
Подскажите — как хотя бы секунды на две или три — остановить это окно, чтобы хотя бы прочитать — что там написано ?
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как остановить результат командной строки?
Не знаю так должно быть или нет? Ввожу в командную строку "netstat -s -p tcp udp" — он там что то.
Считать результат с командной строки
Нужно выполнить команду в командной строке и считать результат без создания временных файлов .
Считать результат с командной строки
С помощью дефи открываю командную сторку и вписываю туда комаду, но бывает, что она не.
Как задать переменной результат действия команды в командной строке
Ребят, подскажите, не могу вкурить, как задать переменной результат действия команды в командной.
![]()
![]()
15899 / 7921 / 755
Регистрация: 03.01.2012
Сообщений: 32,863
bazanski, Гм. Для вас содержимое запускаемого файла является тайной? А не пробовали запустить любую прогу, пишущую видео с рабочего стола, а потом просмотреть это видео покадрово?
Ещё вариант: утилита PSR
Кликните здесь для просмотра всего текста
Регистрация: 21.12.2018
Сообщений: 82
gecata, понятно.
Спасибо за совет.
![]()
![]()
15899 / 7921 / 755
Регистрация: 03.01.2012
Сообщений: 32,863
Можно попробовать нажать Ctrl+Break (если успеете), но не уверена, что при этом окно командной строки не закроется
10581 / 5544 / 864
Регистрация: 07.04.2013
Сообщений: 15,660

Сообщение было отмечено Maks как решение
Решение
Да добавьте же pause
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Как остановить цикл при окончании строки string
Пробую разделять на слова, разделенные пробелом строку string. Внутренний код цикла работает.
Как выйти из командной строки?
Здравствуйте,вот какая проблема.Зашёл по глупости в безопасный режим с командной строкой и теперь.

Как удалить файл из командной строки?
Здравствуйте. Помогите разобраться с удалением файла с командной строки! Вроде все делаю.
Как отменить запуск командной строки?
Здравствуйте, это мой первый опыт программирования под Виндовс. Напейсал программку "для.
Или воспользуйтесь поиском по форуму:
Как запустить и остановить службы через cmd (командной строки)
Службы используется для запуска процессов в любой операционной системе как в Linux так и в Windows. Как правило, службы используются для автоматизации задач, прослушивания определенных событий в системе.
Любой пользователь системы Windows может легко остановить, запустить или перезапустить службу в графическом интерфейсе управления служб. Так же можно запускать службы через cmd.
В этой статье мы покажем вариант управления службой с помощью cmd (командной строки).
Как запустить и остановить службы через cmd (командной строки)
Для управления службами вы можете использовать команду Windows Service Controller (sc) . Она предоставляет вам возможности для управления службами Windows через cmd. Вы также можете изменить тип запуска службы.
Используйте одну из следующих команд для запуска, остановки или перезапуска службы
Включить службу Windows:
Остановить службу:.
Перезапустить службу:
Вы также можете изменить тип запуска службы Windows с помощью команды sc. Следующие примеры помогут вам изменить запуск службы на ручной или автоматический.

Установка типа запуска службы в cmd (Командной строке)
sc config ServiceName start=manual
Отключить службу:
sc config ServiceName start=disabled
Заключение
Вот и все. Данное руководство поможет вам управлять состоянием служб Windows через командную строку (cmd).
Работа с командной строкой ( CMD ) Windows
Командная строка представляет собой программное средство ввода команд пользователем и получения результатов их выполнения на экране. В современных операционных системах семейства Windows, командную строку обеспечивает стандартное приложение cmd.exe , так же называемое командным процессором, интерпретатором команд и консолью. Приложение ”Командная строка” предоставляет пользователю текстовый интерфейс для ввода команд и получения результатов их выполнения. Фактически, командная строка является программным эмулятором классической консоли первых компьютерных систем, представляющей собой терминал с клавиатурой, используемый оператором в качестве средства общения с компьютером. Как и во времена первых компьютеров, командная строка поддерживает стандартное устройство ввода – клавиатуру, и стандартное устройство вывода – дисплей. Пользователь вводит команды с клавиатуры и получает результаты их выполнения на экране дисплея.
Запуск командной строки.
Для запуска командной строки можно воспользоваться одним из следующих способов:
Пуск — Выполнить (или клавиши Win+R) введите cmd и нажмите клавишу Enter;
Пуск — Все программы — Стандартные — Командная строка»;
Пуск — Поиск — Командная строка. Также, для запуска командной строки можно использовать заранее подготовленный ярлык, ссылающийся на исполняемый файл %SystemRoot%\system32\cmd.exe ( обычно – C:\Windows\system32\cmd.exe). Выполнение некоторых команд требует повышенных привилегий, поэтому, приложение командной строки должно быть запущено с использованием пункта контекстного меню ”Запуск от имени администратора”, вызываемого правой кнопкой мышки.
Настройка командной строки.
Стандартное окно командной строки – это окно с символами белого цвета на черном фоне. Параметры шрифтов, цвет и фон символов, использование буфера обмена и прочие свойства командной строки можно изменить в соответствии со своими предпочтениями. Настройки можно выполнить изменяя свойства ярлыка, с помощью которого выполняется запуск приложения командной строки, либо правкой параметров реестра, относящихся к командному процессору.
Работа в командной строке предполагает ввод данных с клавиатуры, при чем, иногда довольно большого объема. Этот объем можно значительно сократить, используя некоторые приемы:
Использование буфера обмена.
Текст, выделенный в окне приложения, можно скопировать в буфер обмена, а также вставить его из буфера обмена в поле ввода. При стандартных настройках командной строки для выделения текста используется пункт ”Пометить” контекстного меню, вызываемого правой кнопкой мышки. При желании, в свойствах ярлыка, с помощью которого выполняется запуск можно включить режим выделения мышью:

В режиме выделения мышью, контекстное меню не используется, а текст выделяется с использованием левой кнопки мышки. Копирование и вставка выполняется при нажатии правой кнопки мышки. При включенном режиме ”Разрешить сочетания клавиш с CONTROL”, можно использовать стандартные сочетания клавиш:
— CTRL+C (CTRL+Insert) – скопировать выделенный текст.
— CTRL+V (Shift+Insert) – вставить выделенный текст.
Использование истории команд и горячих клавиш.
Для вызова ранее введенных команд используются клавиши со стрелками Стрелка Вверх — на одну команду назад и Стрелка Вниз — на одну команду вперед. Кроме того, можно использовать функциональные клавиши:
F1 — посимвольный вызов последней введенной команды. Каждое нажатие F1 приводит к последовательной подстановке в поле ввода одного символа из предыдущей команды.
F2 — копирование до символа. После нажатия на F2 на экране отображается запрос символа, до которого будет скопирована предыдущая команда. Например, если предыдущая команда была ping yandex.ru , и в качестве символа задана точка, то в строку ввода команды будет занесено ping yandex , если задан пробел, то — ping .
F3 — вызов предыдущей команды.
F4 — удалить до символа. Выполняется удаление текста от текущей позиции курсора до заданного символа.
F5 и F8 — вызов буфера ранее введенных команд. Вывод по нажатию клавиши F5 прекращается когда будет отображена первая введенная команда текущей сессии.
F7 — отображение ранее введенных команд в отдельном окне в виде списка. Для выполнения нужной команды нужно выбрать ее, используя клавиши со стрелками, и нажать ENTER
F9 — выполнить команду, номер которой запрашивается. Номер команды в списке истории можно получить при использовании F7 .
В Windows 10 / Windows Server 2016 появились возможности, отсутствующие в предыдущих реализациях командной строки:
— Изменение прозрачности окна консоли при нажатии комбинаций CTRL + Shift + — или CTRL + Shift + + .
— Включение / выключение полноэкранного режима при нажатии CTRL+Enter .
— Расширение возможностей выделения текста и редактирования:
Shift+Home – выделить текст от текущего положения курсора до начала строки.
Shift+End – выделить текст от текущего положения курсора до конца строки.
— Быстрое перемещение по буферу экрана и поиск по контексту:
CTRL+Home – перейти в начало буфера экрана
CTRL+End – перейти в конец буфера экрана.
CTRL+Стрелка Вверх — перемещение на 1 строку вверх.
CTRL+Стрелка Вниз — перемещение на 1 строку вниз.
CTRL+F — открыть диалог поиска текста в буфере экрана.
Окно командной строки в Windows 10 можно закрыть с помощию стандартной комбинации клавиш — ALT+F4 .
Для отключения новых возможностей CMD, необходимо в свойствах приложения установить галочку ”Использовать прежнюю версию консоли (требуется перезапуск)”
Автодополнение путей файлов
В командной строке Windows можно выполнять подстановку имен файлов и каталогов при нажатии клавиши Tab . Например, для перехода, в каталог с длинным именем Program Files наберите начальную часть имени каталога
CD Pro и нажмите Tab. В строке ввода должна появиться команда :
CD «Program Files»
Как видим, выполняется подстановка недостающей части имени каталога, а в тех случаях, когда в нем имеется символ пробела, добавляются еще и двойные кавычки.
Если имеется несколько совпадающих начальных частей имен файлов или каталогов, при каждом нажатии клавиши Tab будет подставляться следующее по алфавитному порядку имя. Для возврата на предыдущее — используется комбинация Shift+Tab
Перенаправление данных стандартного ввода /вывода консоли.
Как уже упоминалось, в качестве стандартного устройства ввода командной строки используется клавиатура, а в качестве устройства вывода – дисплей. Однако, существует возможность перенаправления ввода-вывода на другие устройства c использованием операторов перенаправления:
ping –n 5 localhost > nul — выполнить пинг петлевого интерфейса 5 раз с перенаправлением вывода в фиктивное устройство nul . Вывод результатов выполнения команды подавляется. Подобный прием используется для организации задержки в командных файлах, поскольку пинг петлевого интерфейса выполняется почти мгновенно, а интервал между пингами равен одной секунде, время выполнения данной команды определяется значением параметра -n
ping –n 100 yandex.ru > C:\ping-ya.txt — выполнить 100 раз пинг узла yandex.ru c записью результатов выполнения команды в файл C:\ping-ya.txt. Если файл не существует, он будет создан, а если существует, его содержимое будет затерто.
ping –n 100 yandex.ru >> C:\ping-ya.txt — то же, что и в предыдущем примере, но, если файл не существует, то он будет создан, а если существует, то запись результатов будет выполняться в конец файла.
cmd — запустить командный процессор CMD и выполнить ввод данных из файла 1.txt. Если в файле поместить строку ping –n 100 yandex.ru , то выполнится команда, рассмотренная выше.
Нередко, вывод одной команды нужно передать в качестве вводимых данных для другой, т.е. объединить команды в последовательную цепочку:
ping -n 100 microsoft.com | find «Превышен интервал» — результат выполнения команды ping -n 100 microsoft.com передается в виде входных данных для команды поиска строк ( find ), содержащих текст «Превышен интервал».
ping -n 100 microsoft.com | find «Превышен интервал» > C:\ping-ya.txt — то же, что и в предыдущем примере, но с перенаправлением выводимых результатов выполнения команды в текстовый файл.
Каждому открытому файлу или устройству соответствует свой дескриптор ( handle ) который представляет собой неотрицательное число, значение которого используется породившим поток ввода-вывода процессом. По умолчанию, для всех процессов, в том числе и для командного интерпретатора cmd.exe :
0 ( STDIN ) – дескриптор стандартного ввода (ввод с клавиатуры).
1 (STDOUT) – дескриптор стандартного вывода (вывод на экран).
2 (STDERR) – дескриптор вывода диагностических сообщений (сообщений об ошибках на экран).
Дескрипторы можно использовать в тех случаях, когда требуется перенаправить (изменить) источники и приемники данных в стандартных потоках ввода-вывода. Например:
ping.exe –n 100 yandex.ru 2> C:\pinglog.txt — стандартный поток сообщений программы ping.exe будет выводиться на экран, а ошибки ( стандартный вывод с дескриптором = 2 ) будут записаны в файл C:\pinglog.txt . В реальном случае для программы ping.exe приведенная конструкция значения не имеет, поскольку она выводит и диагностику, и результаты на экран.
Для задания перенаправления в существующие дескрипторы используется амперсанд (&), затем номер требуемого дескриптора (например, &1):
ping –n 100 yandex.ru >log.txt 2>&1 — стандартный поток сообщений об ошибках (дескриптор=2) перенаправляется в стандартный поток вывода (дескриптор = 1) и все это перенаправляется в файл log.txt текущего каталога.
ping –n 100 yandex.ru >log.txt 1>&2 — стандартный вывод (дескриптор = 1) перенаправляется в вывод сообщений об ошибках (дескриптор=2) и все это записывается в текстовый файл.
Если дескриптор не определен, то по умолчанию оператором перенаправления ввода будет ноль (0), а оператором перенаправления вывода > будет единица.
Объединение нескольких команд в цепочку
В командной строке Windows существует возможность последовательного выполнения нескольких команд в зависимости от результатов их выполнения. Для чего используются символы объединения команд — & (амперсанд) и | (вертикальная черта)
& — одиночный амперсанд используется для разделения нескольких команд в одной командной строке. Например:
echo ping ya.ru — вывод на экран строки ping ya.ru
echo &ping ya.ru — последовательное выполнение команды echo без параметров и команды ping ya.ru
&& — условное выполнение второй команды. Она будет выполнена, если код завершения (значение которого передается в стандартную переменную ERRORLEVEL) первой команды равен нулю, т.е. команда выполнена успешно.
команда1 && команда2 — выполняется команда1 , а команда2 выполняется, только если первая была выполнена успешно. Например:
ping ya.ru -err & ping –n 2 ya.ru — при использовании единичного амперсанда, первая команда ping ya.ru –err выдаст сообщение о неверном параметре -err , а вторая, ping –n 2 ya.ru выполнит двукратный пинг узла ya.ru
ping ya.ru -err && ping –n 2 ya.ru — при использовании двойного амперсанда, первая команда ping ya.ru –err выдаст сообщение о неверном параметре -err и соответственно, сформирует код завершения не равный нулю (ошибка), что приведет к тому, что вторая команда ( ping ya.ru -n 2 ) выполнена не будет.
Двойная вертикальная черта || — условное выполнение второй команды. Если первая команда завершилась с кодом возврата не равным нулю (неуспешно), то выполняется команда, следующая за двойной вертикальной чертой.
команда1 || команда2 — если команда1 выполнена неуспешно, то запускается на выполнение команда2
ping –n 1 ya.ru && ping –n2 ya.ru || ping –n 3 ya.ru — сначала выполнится 1-я команда ping ya.ru –n 1 — однократный пинг узла ya.ru , затем выполнится команда ping ya.ru -n 2 — двукратный пинг узла ya.ru . Третья команда ping ya.ru -n 3 , трехкратный пинг узла ya.ru выполнена не будет.
ping –n 1 –err ya.ru && ping ya.ru -n 2 || ping ya.ru -n 3 — первая команда ping ya.ru –n 1 –err выполнится с ошибкой из-за неверного параметра -err , вторая команда ping –n 2 ya.ru — двукратный пинг узла ya.ru не будет выполнена из-за условия двойного амперсанда, и в результате выполнится третья команда ping –n 3 ya.ru , трехкратный пинг узла ya.ru .
В некоторых случаях может возникнуть необходимость запрета обработки служебных символов и трактовки их в качестве простого текста. Например, если ввести в командной строке
ECHO ping -n 1 ya.ru & ping -n 2 ya.ru
то вместо текста ping -n 1 ya.ru & ping -n 2 ya.ru будет выведена его часть до символа амперсанда ping -n 1 ya.ru и затем выполнена команда после амперсанда — ping -n 2 ya.ru . Проблему решает использование специального экранирующего символа ^ , который позволяет использовать служебные символы как текст:
ECHO ping -n 1 ya.ru ^& ping -n 2 ya.ru — вывод на экран текста ping -n 1 ya.ru & ping -n 2 ya.ru
Логика условной обработки команд, реализуемая с помощью конструкций && и || действует только на ближайшую команду, то есть, при вводе команды
TYPE C:\plan.txt && DIR & COPY /?
команда COPY /? запустится в любом случае, независимо от результата выполнения команды TYPE C:\plan.txt . Но, несколько команд можно сгруппировать с помощью скобок. Например, есть 2 командные строки:
TYPE C:\plan.txt && DIR & COPY /?
TYPE C:\plan.txt && (DIR & COPY /?)
В первой из них символ условной обработки && действует только на команду DIR, во второй — одновременно на две команды: DIR и COPY. В качестве наглядного эксперимента, попробуйте выполнить вторую команду при условиях наличия и отсутствия файла C:\plan.txt . Для создания пустого файла можно воспользоваться копированием из фиктивного устройства nul :
copy nul C:\plan.txt
Для удаления файла используется команда erase c:\plan.txt или del C:\plan.txt
Командные файлы
Командные файлы (сценарии, скрипты) – это обычные текстовые файлы с заранее подготовленным набором команд для их выполнения командным процессором cmd.exe . Стандартно, такие файлы имеют расширение .bat или .cmd . Строки командных файлов могут содержать специфические команды самого процессора команд, например — FOR, ECHO, REM и т.п. или имена исполняемых модулей – reg.exe, sc.exe, auditpol.exe., которые можно использовать без расширения – reg, sc, auditpol. Пример простого командного файла:
REM Создается текстовый файл со списком каталога Windows
dir C:\Windows > %TEMP%\winlist.txt
REM выполняется задержка на 5 секунд
ping -n 5 localhost > nul
REM Файл открывается в редакторе WordPad
write %TEMP%\winlist.txt
REM После завершения работы Wordpad, текстовый файл удаляется.
erase C:\winlist.txt
Строки, начинающиеся с REM являются комментариями. В качестве примера, используются команды для работы с файловой системой и выполняется запуск приложения графической среды – текстового редактора Wordpad (write.exe) с передачей ему параметра командной строки (имя файла). Язык командных файлов довольно примитивен и не в полной мере соответствует требованиям сегодняшнего дня, однако, он является самым простым средством автоматизации рутинных действий и используется большинством системных администраторов и грамотных пользователей. Работа с командными файлами – это отдельная тема, более подробно изложенная на странице Командные файлы
Прочие материалы для освоения работы в командной строке Windows:
Как прервать выполнение команды их командной строки?
Форумы CADUser → Autodesk → AutoCAD → Как прервать выполнение команды их командной строки?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщения 18
#1 Тема от SStas 5 октября 2005г. 10:46:54
Тема: Как прервать выполнение команды их командной строки?
Существует ли какая-то возможность прервать команду (как при нажатии «Esc») с помощью ввода чего-либо в командную строку?
Мне это нужно, чтобы вставлять большой массив команд из текстового файла непосредственно в Автокад и иногда требуется прерывать текущую команду (например, чтобы закончить выполнение команды ТЕКСТ)
#2 Ответ от Jura 5 октября 2005г. 11:29:57
Re: Как прервать выполнение команды их командной строки?
Что должно посылать Abort? (Lisp, рука пользователя)
Если из Lisp — (quit) или (exit), но для command вылет идет из программы Lisp, а не только из Command, для VL-CMDF кажись вылет только из текущей command, Lisp программа продолжается.
#3 Ответ от SStas 5 октября 2005г. 12:51:56
Re: Как прервать выполнение команды их командной строки?
Не Lisp, просто команда.
В текстовом файле забита куча команд, которые потом из буфера обмена вставляются в командную строку Автокада и построчно выполняются.
Необходимо, в этом же файле указать, что необходимо прервать текущую команду и выполнять ту, что идёт дальше.
На данный момент это нужно только для того, чтобы прервать команду ТЕКСТ, указав, что команда текст завершена.
#4 Ответ от kpblc 5 октября 2005г. 14:02:34
Re: Как прервать выполнение команды их командной строки?
Я так понимаю, что это скрипт. По поводу скриптов и работы с ними лучше всего ИМХО описано у В.Света «AutoCAD Язык макрокоманд и создание кнопок». Если пришлешь весь скрипт (только запакуй его), попробую нарисовать лисп.
#5 Ответ от Jura 5 октября 2005г. 14:14:15
Re: Как прервать выполнение команды их командной строки?
«Пустой ввод» — пустая строка (Hex0D0A)
#6 Ответ от Jura 5 октября 2005г. 14:17:23
Re: Как прервать выполнение команды их командной строки?
PS обычно используется пробел, но в команде TEXT, на шаге ввода «текста», пробел воспринимается не как «пустой ввод»(управляющий символ), а как рядовой символ текста, поэтому придется в «текстовом файле» добавлять пустую строку.
#7 Ответ от Владимир Громов 5 октября 2005г. 14:19:30
Re: Как прервать выполнение команды их командной строки?
> kpblc
Но ведь скрипт не надо запускать через буфер обмена. Он ведь запускается командой «_script» («пакет»). И такой текст:
_line
_redraw
_dtext
как можно понять из этой фразы:
В текстовом файле забита куча команд, которые потом из буфера обмена вставляются в командную строку Автокада и построчно выполняются.
вряд ли имеет смысл. Неплохо было бы увидеть хоть фрагмент этого текстового файла.
#8 Ответ от kpblc 5 октября 2005г. 14:32:01
Re: Как прервать выполнение команды их командной строки?
Ну да, неправильно выразился. Лично мне скрипты не подошли никаким боком, так что я их не помню, поскольку не пользуюсь. Почему и попросил текст — для лиспа. Там имхо возможностей поболее будет.
#9 Ответ от SStas 6 октября 2005г. 11:02:51
Re: Как прервать выполнение команды их командной строки?
Хорошо, вот фрагмент:
_point 1784.321,859.000,0.000 _DTEXT 1784.321,859.000,0.000 1 _point 1784.316,852.514,34.926 _DTEXT 1784.316,852.514,34.926 2
Необходимо, чтобы после числа в тексте шло прерывание команды _dtext.
Наверняка это можно сделать макросом или скриптом, но писать я их не умею. Есть куча координат в текстовом виде, необходимо в данной координате поставить точку и написать её номер.
#10 Ответ от kpblc 6 октября 2005г. 12:07:11
Re: Как прервать выполнение команды их командной строки?
Если без проверки, то примерно так:
;; Сохранение состояния системных переменных (defun lib:error-save-sysvar (sysvar-list) (foreach item sysvar-list (setq *kpblc-sysvar-list* (cons (list (car item) (getvar (car item))) *kpblc-sysvar-list* ) ;_ end of cons ) ;_ end of setq (if (cadr item) ; передано устанавливаемое значение (setvar (car item) (cadr item)) ) ;_ end of if ) ;_ end of foreach ) ;_ end of defun ;; Восстановление состояния системных переменных (defun lib:error-restore-sysvar () (if *kpblc-sysvar-list* (foreach item *kpblc-sysvar-list* (setvar (car item) (cadr item)) ) ;_ end of foreach ) ;_ end of if (setq *kpblc-sysvar-list* nil) (princ) ) ;_ end of defun ;; получение координат точек. Возвращает список координат (defun lib:point-get-coord (string / x y z) (setq x (atof (substr string 1 (vl-string-search "," string))) string (substr string (+ 2 (vl-string-search "," string)) (strlen string)) y (atof (substr string 1 (vl-string-search "," string))) z (atof (substr string (+ 2 (vl-string-search "," string)) (strlen string))) ) ;_ end of setq (list x y z) ) ;_ end of defun ;; Получение значения dxf-кода для примитива (defun lib:ent-get-dxf-data (ent dxf) (cond ((= (type ent) 'ename) (setq ent (entget ent))) ((= (type ent) 'vla-objec) (setq ent (vlax-vla-object->ename ent))) ) ;_ end of cond (cdr (assoc dxf (ent))) ) ;_ end of defun ;; Последовательное чтение файла. Возвращает список точек (defun lib:read-file (file-name / file_handle file_string result) (if (setq file_handle (open file-name "r")) (progn (while (and (setq file_string (vl-string-trim " " (read-line file_hadle))) (not (vl-string-search "," file_string)) ) ;_ end of and (setq result (append result (lib:point-get-coord file_string))) (reverse result) ) ;_ end of while ) ;_ end of progn ) ;_ end of if ) ;_ end of defun ;; Создание точек ;; Параметры: file-name текстовое имя файла ;; autonum автоматически нумеровать (t) или нет (nil) ;; В случае автоматической нумерации используется выравнивание Left (defun _kpblc-make-points (file-name autonum text-height / point_list counter) (setq point_list (lib:read-file file-name) counter 0 ) ;_ end of setq (foreach item poitn_list (setq couter (1+ counter)) (command "_.point" item) (if autonum (progn ; Ведется автонумерация (if (= (cdr (assoc 40 (tblsearch "textstyle" (getvar "textstyle")))) 0.0) (command "_.dtext" "_j" "_mc" item text-height 0.0 (itoa counter)) (command "_.dtext" item 0.0 (itoa counter)) ) ;_ end of if ) ;_ end of progn (progn ; Автонумерации нет (command "_.dtext") (while (/= (getvar "cmdactive") 0) (command pause) ) ;_ end of while ) ;_ end of progn ) ;_ end of if ) ;_ end of foreach ) ;_ end of defun (defun mk-point (/ file_name _answer_ text_height) ;; Локальные функции (defun *error* (msg) (princ msg) (lib:error-restore-sysvar) ) ;_ end of defun ;; Конец локальных функций (lib:error-save-sysvar '(("osmode" 0))) (setq file_name (getstring "\nВведите имя файла : ")) (initget "Да Нет _ Yes No") (setq _answer_ (getkword "\nВыполнять автоматическую нумерацию [Да/Нет] ? : " ) ;_ end of getkword ) ;_ end of setq (setq _answer_ (= _answer_ "Yes")) (if (= (lib:ent-get-dxf-data (tblsearch "style" (getvar "textstyle")) 40) 0.0) (progn (setq text_height (getreal "\nВведите высоту текста для нумерации :") ) ;_ end of setq (if (not text_height) (setq text_height 2.5) ) ;_ end of if ) ;_ end of progn (setq text_height (lib:ent-get-dxf-data (tblsearch "style" (getvar "textstyle")) 40 ) ;_ end of lib:ent-get-dxf-data ) ;_ end of setq ) ;_ end of if (_kpblc-make-points file_name _answer_ text_height) (lib:error-restore-sysvar) ) ;_ end of defun
#11 Ответ от kpblc 6 октября 2005г. 12:40:05
Re: Как прервать выполнение команды их командной строки?
Ох, елки-моталки, кое-что надо поменять:
1. Выравнивание не Left, а Middle Center — оно попроще.
2. Слетело форматирование на одной строке. Вроде сейчас должно быть нормально:
;; Сохранение состояния системных переменных (defun lib:error-save-sysvar (sysvar-list) (foreach item sysvar-list (setq *kpblc-sysvar-list* (cons (list (car item) (getvar (car item))) *kpblc-sysvar-list* ) ;_ end of cons ) ;_ end of setq (if (cadr item) ; передано устанавливаемое значение (setvar (car item) (cadr item)) ) ;_ end of if ) ;_ end of foreach ) ;_ end of defun ;; Восстановление состояния системных переменных (defun lib:error-restore-sysvar () (if *kpblc-sysvar-list* (foreach item *kpblc-sysvar-list* (setvar (car item) (cadr item)) ) ;_ end of foreach ) ;_ end of if (setq *kpblc-sysvar-list* nil) (princ) ) ;_ end of defun ;; получение координат точек. Возвращает список координат (defun lib:point-get-coord (string / x y z) (setq x (atof (substr string 1 (vl-string-search "," string))) string (substr string (+ 2 (vl-string-search "," string)) (strlen string)) y (atof (substr string 1 (vl-string-search "," string))) z (atof (substr string (+ 2 (vl-string-search "," string)) (strlen string))) ) ;_ end of setq (list x y z) ) ;_ end of defun ;; Получение значения dxf-кода для примитива (defun lib:ent-get-dxf-data (ent dxf) (cond ((= (type ent) 'ename) (setq ent (entget ent))) ((= (type ent) 'vla-objec) (setq ent (vlax-vla-object->ename ent))) ) ;_ end of cond (cdr (assoc dxf (ent))) ) ;_ end of defun ;; Последовательное чтение файла. Возвращает список точек (defun lib:read-file (file-name / file_handle file_string result) (if (setq file_handle (open file-name "r")) (progn (while (and (setq file_string (vl-string-trim " " (read-line file_hadle))) (not (vl-string-search "," file_string)) ) ;_ end of and (setq result (append result (lib:point-get-coord file_string))) (reverse result) ) ;_ end of while ) ;_ end of progn ) ;_ end of if ) ;_ end of defun ;; Создание точек ;; Параметры: file-name текстовое имя файла ;; autonum автоматически нумеровать (t) или нет (nil) ;; В случае автоматической нумерации используется выравнивание Left (defun _kpblc-make-points (file-name autonum text-height / point_list counter) (setq point_list (lib:read-file file-name) counter 0 ) ;_ end of setq (foreach item poitn_list (setq couter (1+ counter)) (command "_.point" item) (if autonum (progn ; Ведется автонумерация (if (= (cdr (assoc 40 (tblsearch "textstyle" (getvar "textstyle")))) 0.0) (command "_.dtext" "_j" "_mc" item text-height 0.0 (itoa counter)) (command "_.dtext" item 0.0 (itoa counter)) ) ;_ end of if ) ;_ end of progn (progn ; Автонумерации нет (command "_.dtext") (while (/= (getvar "cmdactive") 0) (command pause) ) ;_ end of while ) ;_ end of progn ) ;_ end of if ) ;_ end of foreach ) ;_ end of defun (defun mk-point (/ file_name _answer_ text_height) ;; Локальные функции (defun *error* (msg) (princ msg) (lib:error-restore-sysvar) ) ;_ end of defun ;; Конец локальных функций (lib:error-save-sysvar '(("osmode" 0))) (setq file_name (getstring "\nВведите имя файла : ")) (initget "Да Нет _ Yes No") (setq _answer_ [b](getkword "\nВыполнять автоматическую нумерацию [Да/Нет] ? : "[/b] ) ;_ end of getkword ) ;_ end of setq (setq _answer_ (= _answer_ "Yes")) (if (= (lib:ent-get-dxf-data (tblsearch "style" (getvar "textstyle")) 40) 0.0) (progn (setq text_height [b](getreal "\nВведите высоту текста для нумерации :")[/b] ) ;_ end of setq (if (not text_height) (setq text_height 2.5) ) ;_ end of if ) ;_ end of progn (setq text_height (lib:ent-get-dxf-data (tblsearch "style" (getvar "textstyle")) 40 ) ;_ end of lib:ent-get-dxf-data ) ;_ end of setq ) ;_ end of if (_kpblc-make-points file_name _answer_ text_height) (lib:error-restore-sysvar) ) ;_ end of defun
Выделенные строки должны быть в одну строку.