Интерпретатор и интерфейс CMD, в чём разница.

Неочевидное поведение команд в командной строке.

[ x ] запретить сбор данных ...

В начало :: Карта сайта :: Быстрый поиск

Авторский сайт ТехСтоп Екб Ру :: Инфоблог

Погода :: Трасса :: Авто :: Радио
Компьютер :: Программы :: Спутники
Электрика :: Диагностика :: Сервис и ТО


Создав супер быстрый алгоритм BAT CMD, сумевший ушатать интерпретатор командной строки Windows - я столкнулся с неожиданно неочевидным поведением команд, о котором если и догадывался ранее, то - весьма туманно и неопределённо ... Даже, не знаю - с чего начать ))) ...

Установщик SET.

Давайте начнём с команды установщика SET ... Почему - установщик ? ...
Помогая выполнять арифметические операции SET /A B=2+5 эта команда принимает + как руководство к действию, сумматор, и вычисляя 2+5 - устанавливает переменной %B% значение =7 ... Можно сказать, и - присваивает ... Но ...
присвоить - assign, appropriate ... значить - пометить, заимствовать себе ... в то время, как ...
установить - install, place, mount, fix, specify, adjust, fit ... что в переводе с английского - объединяет все действия к общей идее - установить нечто - на своё место ; приспособить - таким образом, чтобы со всех сторон, это выглядело - правильно ... Поэтому, установщик - наиболее подходящее слово ... Тем более, в других языках, оператор присваивания, это знак = равно ...

Тем, более - SET - не только вычисляет ... А, вот и - подходящий пример ...
Установите переменной а значение & ...
SET a=& ... не работает ... ECHO %a% = %a% ...

Наверно, надо экранировать символ ... Среди специальных символов, используемых в командной строке, можно выделить следующие : & | > < / ? * % , которые используются для соединения команд, перенаправления ввода / вывода, поиска файлов по маске и т.д. ... Амперсанд - входит в их число, и подлежит экранированию ...

Что, чем и как экранировать ? ... символ ^ экранирует практически всё, включая самого себя ... Подробнее про экранирование спец символов, можно будет прочитать - ниже ...
Значит нужно экранировать - так : ^& ... Пробуем ...
SET a=^& ... не работает ... ECHO %a% = Режим вывода команд на экран (ECHO) включен ...

Ого, крепкий орешек ))) ...
Начинаем искать специальные знания и натыкаемся на совет - использовать кавычки ... Обычно, кавычки применяются, когда нужно игнорировать пробел в значении переменной, обычно воспринимаемый, как - делитель параметров ... Также, кавычки - являются своеобразным экраном текстовых символов и строк ... Что же - пробуем ...
SET "a=&" ... не работает ... ECHO %a% = Режим вывода команд на экран (ECHO) включен ... Тот же вид, только сбоку ))) ... Ну, что же, поскольку мыслей больше нет - объединяем все известные способы - в одно целое ...

SET "a=^&" ... ура ... заработало ... ECHO %a% = & ...
Посмотрите, вам не кажется эта запись кавычек - совершенно неочевидной ... Наверное правильнее, было бы записать это выражение - так ...
SET a="^&" ... Оказывается - нет ... Эта запись - неправильная ... Оказывается ещё и то, что команда SET - уже имеет неявные кавычки, которые гласят : всё, что находится внутри кавычек - принадлежит переменной a ...
SET a="^&" ... ECHO %a% = "^&" ... Явные кавычки и то, что экранировано внутри них - стало принадлежать неявным кавычкам и, соответственно - оператору / переменной а ... Вот это наиболее яркий пример совершенно неочевидного поведения интерпретатора командной строки ...
В случае математики, этот пример - не показывает такой нужной наглядности ...
SET /A "a=2+5" или SET /A a="2+5" всё равно дают a = 7...

Теперь, посмотрим кавычки с пробелом в пути ...
SET a=c:\my folder ... ECHO %a% = c:\my folder ... Пока вы оперируете переменной внутри интерпретатора командной строки - кавычки не имеют большого значения (до сложных случаев экранирования спецсимволов) ... В 99% стандартных операций с текстом и числами, кавычки - не потребуются ...

Создадим папку c:\my folder и внутри my folder.txt и выполнить команду ...
DIR %a% ... Содержимое папки c:\ - файл не найден ... Содержимое папки c:\users\user - файл не найден ...
DIR "c:\my folder" ... Явным прямым указанием проверяем, есть ли такой каталог на диске, а в кавычках - потому-что есть пробелы в пути ... Содержимое папки c:\my folder ... файл my folder.txt ... Всё прекрасно видится и читается ... Изменяем команду установщика пути ...
SET "a=c:\my folder" ... ECHO %a% = c:\my folder ... Эта команда - снова не подойдёт, так как не содержит кавычек, экранирующих пробелы в пути ...
SET a="c:\my folder" ... Именно в этом случае, нужен - неправильный вариант команды, который фактически выглядит, как SET "a="c:\my folder"" - внутри неявных кавычек SET ...
ECHO %a% = "c:\my folder" ... Проверяем значение переменной ... Другое дело ))) ...
DIR %a% ... Проверяем DIR ... Содержимое папки c:\my folder ... файл my folder.txt ... Всё работает ... Когда вы используете пробелы или спец символы - в виде текста команды, в интерфейсе командной строки Windows - они подлежат экранировке, чтобы не быть интерпретированными - как управляющий операторы или конструкции синтаксиса ...

Командная строка. Интерпретатор CMD. Интерфейс Windows.

Многие, наблюдая черный экран DOS в среде Windows - воспринимают его, как обычную программу CMD.EXE, считая этот способ взаимодействия с компьютером и ОС - страшным, сложным, непрактичным и устаревшим ))) ... После много красочной Windows - очень некомфортно оказаться в среде, без графического интерфейса и визуальной обратной связи ... На самом деле, это - одно из жесточайших и неочевидных заблуждений ... Нужно явно понимать, что эти разные концепции командной строки, интерпретатор CMD и интерфейс Windows - тесно интегрированы одно в другое ... Отсюда и проистекает понимание, того - как воспринимать спец символы - в зависимости от среды обработки ...

Интерпретатор CMD командной строки ... Если специальные символы или управляющие операторы используются для вычислений параметров и результатов команды - внутри самой себя - спецсимволы должны экранироваться, чтобы отменить их специальное действие и представить их в виде обычных тексто / графических символов ...
Напечатать строку a > b ... Это - не выражение, и не переменные - обычный текст ...
ECHO a > b ... не даст ничего - бред, с точки зрения интерпретатора ...
"ECHO a > b" ... заставить интерпретатор ответить явно, в чем бред ? ))) ... не является внутренней или внешней командой, исполняемой программой или пакетным файлом ...
ECHO "a > b" ... напечатает "a > b" , так как кавычки - отменяют действие оператора перенаправления > и попадают в область действия неявных кавычек ECHO, поэтому - тоже будут отображены ...
ECHO a ^> b ... напечатает a > b ... экранировать только действие оператора перенаправления (среди текстовых символов) ... В ответ - ECHO напечатает обычные символы, как эхо в горах - что крикнешь, то и услышишь ))) ...

Интерфейс Windows командной строки ...
SET a=3
SET b=5
ECHO %a%>%b% ... так как % попытался экранировать символ перенаправления > , а ECHO - не смогла сказать чего либо внятного - она отрапортовала, что : Режим вывода команд на экран (ECHO) включен ... То есть - команда сообщила свой статус ...
ECHO %a% > %b% ... ничего, тишина ))) ... Попробуем заставить CMD дать явный ответ ...
"ECHO %a%>%b%" ... "ECHO %a% > %b%" ... echo 3>5 и echo 3 > 5 - действительно не являются никакими командами, а Эхо не может заместить или пере вычислить значение одним оператором - в другом ...
ECHO %a%+=%b% ... напечатает 3+=5 ... это просто текст ...
ECHO %a% ... отобразит значение переменной a = 3 ...
Однако, ECHO %a% > nul ... не отобразит вывод Эхо, перенаправив его в специальный контроллер nul - это специальное устройство в операционной системе Windows, которое используется для отключения вывода текста в командной строке ... нулевое устройство - есть, но не сохраняет вывод команд ... что то вроде ассемблерной команды NOP - ничего не делать ... Однако, ничего не делая, команда - тратит процессорное время, создаёт задержки, выравнивает блоки в памяти и вообще - является реальной командой с возможностью обращения к ней (программная заглушка) ...
Однако, ECHO %a%>nul ... Эхо снова сообщит свой статус, так как % снова попытается экранировать символ перенаправления и будет сбивать с толку интерпретатор данных и команд ... Но, на самом деле, в обычном программном коде, подобная запись, без пробелов - практически не вызывает проблем, насколько я могу вспомнить ... Какое значение имеет пробел в данных и командах BAT CMD ? ...

Суть сравнения интерпретатора CMD и интерфейса Windows одного и того же выражения / окна командной строки - в том, что если неочевидно, к какому результату приведет действие той или иной команды, расположения спецсимволов и пробелов - лучше убедиться, в этом - заранее ))) ...

Пробел в командах и данных BAT CMD.

Иногда, для красоты кода, в примерах программирования, команды, данные и спец символы управляющих конструкций - вводят через пробел ...
SET a = 3 ... результат ECHO %a% = 3 , но иногда может быть %a% = %a% , то есть - переменная не была пере / или - определена ...
SET a = 3 ; SET a = 4 ... результат ECHO %a% = 3 ... Снова - бардак на раздаче ... Эта ситуация может сложиться из-за неопределенного состояния регистров интерпретатора (предположение) после выполнения прошлых команд ... Но, согласитесь, в этом - что-то есть и кроется какой-то нюанс ))) ...
SET b=4 ... ECHO %b% = 4 ...
SET b=5 ... ECHO %b% = 5 ... Никаких проблем - не наблюдается ... Сравните с предыдущим примером ECHO %a%>nul и ECHO %a% > nul ...

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

Также пробелы - могут быть использованы в данных, передаваемых в команду ... Если данные содержат пробелы, то их также нужно заключать в кавычки или экранировать символом ^ чтобы команда работала правильно ...

Режим SetLocal EnableDelayedExpansion - может быть полезным и рекомендуется, так как позволяет использовать переменные - с пробелами внутри значений ... В любом случае, использование пробелов в командах и данных в командной строке следует использовать - осторожно и - правильно экранировать символы, если это необходимо для корректной работы программного кода ...

Программные файлы интерфейсы физического оборудования ПК.

В командах BAT CMD, кроме NUL - есть несколько других специальных файлов-устройств, которые могут использоваться в качестве контролов ... Эти файлы-устройства предоставляют доступ к различным физическим устройствам компьютера через командную строку и могут быть использованы как входные и выходные интерфейсы для команд ...
CON - консольный ввод / вывод, для ввода с клавиатуры и вывода на экран ...
PRN - принтер, для вывода команд на принтер ...
LPT1 (LPT2 , LPT3) - параллельные порты коммуникации ПК, в настоящее время устарели и могут быть задействованы через драйвера ОС адаптеров переходников USB - LPT ...
COM1 (COM2 , [COM3 , COM4]) - последовательные порты ввода / вывода и обмена данными ПК c периферийными устройствами ... В настоящее время - практически устарели, но ещё очень много софта и программ требует их для своей работы, и они могут быть задействованы через драйвера ОС широко распространенных версий адаптеров переходников USB - COM / RS-232 ...

Различные наглядные примеры использования программных файлов физических устройств в командах BAT / CMD ... COPY file.txt CON ... DIR > LPT1 ... ECHO %a% > COM1 ... Однако - следует быть осторожными при использовании этих файлов-устройств, поскольку неверное использование может привести к непредсказуемым результатам, ошибкам устройства и прочим неожиданно / неприятным событиям ...

Передача параметров между сценариями BAT CMD.

Для передачи параметров из одного .bat файла в другой, можно использовать оператор CALL ... Эта команда вызывает один сценарий из другого, при этом некоторые данные можно передать, как входные параметры для вызываемого файла, до 9, через разделитель пробел ...
CALL 2.bat aaa bbb ccc ...

При запуске, BAT / CMD умеет принимать параметры %0 - %9, при этом %0 - уже занят текущим именем файла (текущим расположением пути запуска скрипта) ...
CALL b.cmd ... %0 = b.cmd ; остальные параметры - пустые (не определены) ...
CALL b.cmd a b c d e f g h i j k l m n o ... Пытаемся передать 15 параметров, и получаем ... %0=b.cmd ... %1=a ... %2=b ... %3=c ... %4=d ... %5=e ... %6=f ... %7=g ... %8=h ... %9=i ... - это, то, что можно явно передать, как параметры ... Но, если продолжить, то увидим : %10=a0 ... ... %11=a1 ... %12=a2 ... %13=a3 ... %14=a4 ... %15=a5 ... Какие-то индексы неопределённых внутренних структур ...
CALL b.cmd ... Если же - вызвать сценарий скрипта - без параметров, но попытаться считать те же самые %0 - %15, то увидим - такую картину : b.cmd . . . . . . . . . 0 1 2 3 4 5 , где точки - это пустые, но осязаемые пробелы ...

Модификатор %~1 используется для удаления любых кавычек, которые могут быть включены в параметр для защиты от пробелов ... Нужные кавычки, также - передаются внутри кавычек, с последующим очищением внешних - модификатором %~ получения и преобразования входного параметра ...

Упоминалось, что если параметр содержит знак = в начале имени - то от него невозможно отделаться никоим образом или способом ... В моём случае на CMD Win7, это - не подтвердилось (=x обрезается до x ; кавычки - снимаются ) ... Пример - ниже ... Для удобства я располагаю его вертикально, чтобы было понятно, какой слева отправляемый параметр и справа - принимаемый ...

%% ... a.cmd ... b.cmd
%0 ... - ... b.cmd
%1 ... "a b" ... "a b"
%2 ... "c d" ... "c d"
%3 ... =e ... e
%4 ... "=f" ... "=f"
%~5 ... "=g" ... =g
%6 ... h ... h
%7 ... i ... i
%8 ... j ... j
%9 ... k ... k

Несмотря на то, что внешне - всё работает исправно, сложные случаи параметров рекомендуется передавать - через внешние файлы ...

Прочие особенности команд командной строки.

О сложности, неадекватности, неожиданности, непредсказуемости и неочевидности поведения команд командной строки, можно писать, если не вечно, то - много и долго ))) ... Несмотря, на всю простоту и примитивность BAT CMD интерпретатора ...

RANDOM.

Я не заметил никакой принципиальной разницы между %RANDOM% и !RANDOM!, хотя упоминается, что она - есть ))) ...

SET.

Команда SET может неявно обрезать пробелы в начале и конце значения переменной, если ее определение задано с пробелами ... Но я бы сильно не рекомендовал полагаться на неочевидность и непредсказуемость её поведения ))) ...
SET a= 5 ... ECHO %a% = пробел5 ...

FOR.

В команде FOR имеется неявное поведение, когда переменная цикла $ может не подставляться, если она используется в блоке команд FOR сразу после DO - вернет только первый вариант %i, но не второй и третий ... Не знаю, у меня - работает ...
FOR %%I IN (1) DO ECHO %%I %%I %%I ... ответ : 1 1 1 ...

ECHO.

В команде ECHO есть неявный символ перевода строки, добавляющийся в конец строки - может создавать проблемы, если не учитывать его влияние ...
ECHO /n aaa - запрет переноса строки - не работает, в моём случае ... так и в справке по команде - нет этой опции ))) ...

START.

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

DIR.

В случае с командой DIR, спецсимволы &, <, > или | - не требуют экранирования, так как они используются только для операций в командной строке, а не внутри команды DIR самой в себе ...

Экранирование спецсимволов.

Действительно, при работе в языке BAT и CMD символы %, !, ^, ", &, ?, *, / - имеют особое значение ... Для того чтобы использовать их в командной строке, необходимо использовать экранирование символов ... Что, чем и как экранировать ? ...

Символ ^ экранирует практически всё, включая самого себя ... Символ ^ используется в CMD / BAT для экранирования символов ...
Амперсанд &, оператор объединения команд в одной строке ...
Угловые скобки < >, оператор перенаправления ...
Вертикальная черта / штрих |, оператор конвейера ...
Скобки ( ), символ группировки ...
Звездочка *, шаблон подстановки имён файлов и папок ...
Знак вопроса ?, маска для поиска файлов по шаблону имени ...
Прямой слеш /, указатель опций команд ...
Двойная кавычка ", указатель начала и конца строки ... Кавычки - также пытаются, в меру сил - подавлять специальные операторы внутри обозначенной текстовой строки ... Помните про её недостаточность, в случае с амперсандом SET "a=^&" ... Также, подмечено, что если ECHO, вместо ответа - указывает свой статус (режим Эха включен), то заключение выражения в кавычки - лишь подтвердит, что указанной команды, исполняемого файла или сценария - не существует ))) ... Плохая команда, можно сказать ))) ...

Сами себя экранируют ...
% экранирует %, и по мере возможности пытается экранировать некоторые управляющие символы, не разделённые пробелом ...
! экранирует ! переменные в режиме SETLOCAL локального включения расширений функциональности команд интерпретатора CMD и разрешение отложенного раскрытия переменных ... Отложенное (ленивое) раскрытие переменных EnableDelayedExpansion означает, что переменные будут раскрываться - не в момент выполнения команды, а в момент ее переопределения - в текущий момент времени...
И, уже известный ^ экранирует ^ ...

Также отмечается, что если в переменную нужно внести значение с первым знаком равно =TestValue, то оно должно экранироваться нижним подчёркиванием, что вообще - совершенно неочевидно ))) ... _=TestValue ... По этой же причине - категорически не рекомендуется называть имена переменных - начиная с символа _ нижнего подчёркивания ...

Список всех страниц, раздел computer : смотреть онлайн бесплатно, интересное - надо посмотреть ...


Диагностика автомобиля.

Автодиагност визитка, компьютерная диагностика двигателя автомобиля, грузовика. Отечественные и импортные ... Быстрое чтение кодов ошибок DTC ... K-Line. ELM 327. ОБД. EOBD. MOBD. USA OBD. JOBD ... Рекомендации ... Подробнее ...

computer, bat-cmd-non-obvious-behavior. QR Code ссылка, куар код кюар.


Уголок автолюбителя ... Авто транспорт ... Информация ... VDL Berkhof [CDP trucks] ... Ambassador ... Axial ... Diplomat ... Jonckheer ... где сделать диагностику двигателя ... JMC [CDP car] ... Transit ... GAZ Trucks [CDP trucks] ... 33-Series ... Gazon ... Valday ... Другие машины и услуги ...


Популярные ссылки.

Компьютер. Раздел сайта computer, ... Обработка. Функция. HDD. Звук. Проблема. Компьютер. Настройка. Работа. Смар ...

Радио Малахит DSP SDR. Все диапаз ... Какой лучше, китайский или оригинал Малахит SDR DSP. Обновления прошивки. Л ...

International Fuse Relay. Предохр ... Свет, фары, приборы, сигнал и огни. Подача напряжения питания. Зажигание. В ...

#1. Как слушать радиостанции. SDR ... GNU Radio Companion. Что нужно для цифровой обработки радио сигнала звука. ...

Все об аккумуляторе. Зарядка. Ток ... Все о зарядке аккумулятора. Ток. Напряжение. Плотность. АКБ батарея. Зарядк ...

Валидатор КПП передач. Калькулято ... Calc gear validator - калькуляционный валидатор передач, это очередная игру ...

Калькулятор стоимости грузоперево ... Грузоперевозки, калькулятор стоимости грузовой доставки. Расчет стоимости г ...


Новости РУ СМИ, сводки.

2023-11-30 ...

... Рекомендуется обращать внимание на затянувшийся кашель у детей (дольше 3 недель), а также - одышку, тяжелое дыхание ... Число заболевших ОРВИ и гриппом всё растет, и опять выявляется много случаев ковида - на треть больше ... Новое исследование в журнале Annals of Allergy, Asthma & Immunology - указывает простой способ снизить тяжесть течения ковида : это обычное полоскание горла теплой соленой водой ...

2023-11-30 ...

... Рекомендуется обращать внимание на затянувшийся кашель у детей (дольше 3 недель), а также - одышку, тяжелое дыхание ... Число заболевших ОРВИ и гриппом всё растет, и опять выявляется много случаев ковида - на треть больше ... Новое исследование в журнале Annals of Allergy, Asthma & Immunology - указывает простой способ снизить тяжесть течения ковида : это обычное полоскание горла теплой соленой водой ...

2023-12-26 ...

... Вирус Хамелеон умеет отключить сканер отпечатка пальца на смартфоне, вынуждая владельца вводить код, и - ворует личные данные ... Вирусная программа распространяется через сервис Zombinder - набор приложений, выдающих себя за популярный браузер Google Chrome ... Зловредный хакерский софт умеет выдавать фейковую HTML-страницу за раздел с настройками, позволяя похищать пароли и прочие конфиденциальные данные на смартфонах под управлением Android 13 и более ранних версий ОС ... В качестве защиты специалисты рекомендуют включить функцию Play Protect и избегать установку программ через APK-файлы ...

Смотреть все самые интересные новости последних дней, недели, месяца ...

Новые страницы сайта.

22:27 29.02.2024 Послание В. В. Путина - ФС. Главное. Кратко. Суть. ... IndexNow : Y222729022024 , B222729022024 ...

17:34 28.02.2024 Announce torrent tracker list 2024. Crazy load speed.

22:13 23.02.2024 Как SVG файл открыть в браузере. Плагины. Программы.


Кратко полезное.

способ быстрой очистки от алкоголя ...

# ... gazeta.ru, Способ быстрой очистки от алкоголя обнаружили ученые.

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

ai pitchgrade.com ...

... создавайте презентации мгновенно ... создавайте высококачественные и насыщенные исследованиями презентации на более чем 180 языках с помощью современного программного обеспечения ...

Подробнее : Каталог ИИ инструментов, ассистентов и помощников ...

ai replicate.com ...

... используйте модель стабильной диффузии Runway для создания видео с бесконечным циклом ... прогнозы выполняются на графическом процессоре Nvidia A100, 40 ГБ ... прогнозы обычно выполняются в течение 43 секунд ... время прогнозирования для этой модели значительно варьируется в зависимости от входных данных ...

Подробнее : Каталог ИИ инструментов, ассистентов и помощников ...


СоцСети, вход моя страница.

Cоциальная сеть, моя страница, поиск, вход без регистрации, знакомство без пароля, войти бесплатно ...

Разрешенные соцсети в РФ : ... VK, вконтакте, общение и поиск друзей ... ОК, одноклассники, найти старых друзей по школе, учёбе, службе и работе ... t.me, telegram, система мгновенного обмена сообщениями, текст, голос и видео ... Youtube, популярный видеохостинг ...

Запрещенные соцсети в РФ : ... Твиттер X, сервис микроблогов и социальная сеть ... Фейсбук, общение с друзьями, родственниками и сослуживцами по работе ... Инстаграм, сеть обмена фото видео для мощных и уверенных, в себе, людей ... [инстасамцов и инстасамок] - шутка ))) ... ЛинкедИн , сеть профессиональных контактов по работе, деловой имидж в бизнесе ...


techstop-ekb.ru © ТехСтоп, Екатеринбург, Россия. 2024.