|
|
|
Наиболее частые ошибки, заметки особенностей программинга BAT файлов, баги интерпретатора*10.01.2013, 15:41. Показов 133551. Ответов 116
Метки %~dp0, chcp 1251, кодировка в консоли, оптимизация кода, режим вывода команд на экран (echo) включен, текущий рабочий каталог bat, украинский cmd/bat, экранирование спецсимвола (Все метки)
Эта тема - ответвление Тонкости языка, редкие команды и сложные скрипты
Постим сюда детали, которые Вы получили опытным путем. Которые считаете уникальными, или могут быть полезными при наборе кода BAT файлов, лучшего понимания принципов работы среды командной строки. Пишем ошибки, которые иногда допускаете, а потом ломаете голову, почему не работает ![]() Писать можно много и часто, даже если это мелочь. Все соберем вместе. Весомые замечания перенесем в указанную выше тему. Собрано по категориям: Файловые операции 5) Использование рабочего каталога Bat файла в роле начального для выполнения команд в нем на ОС >= Vista ссылка 8) Как проверить - существует ли папка ссылка 10) Не использовать && после команды Del. ссылка 12) После перехода в другой каталог проверять успех операции ссылка 18) Листинг текущего каталога или корневого ссылка 24) Работа с файлами/папками, в именах которых есть буквы украинского алфавита. ссылка Символы 1) Экранирование спецсимвола ссылка 13) Сохранение концевого пробела в переменную ссылка 17) Запятая и точка с запятой - разделители аргументов ссылка 30) Экранирование номера потока в перенаправлении вывода Echo ссылка Переменные 2) Использование одноименных переменных без обнуления ссылка 3) Пренебрежение Setlocal ссылка 3.1) Не указав Setlocal EnableDelayedExpansion, используем знаки восклицания (!) для раскрытия значения переменных ссылка 6) Инициализация числового типа данных ссылка 14) Обход ошибки "Режим вывода команд на экран (ECHO) включен" ссылка 16) Пробелы тоже могут являться частью названия переменной ссылка 23) Для команды SET всегда заключайте в кавычки переменную и значение, если ним является изменяемое имя файла ссылка 28) Двойное раскрытие переменной. Первыми раскрываются проценты. ссылка 29) Конструкция вида Echo.!Var:~0,1! не работает. ссылка Циклы 7) EOL в цикле FOR - правильный порядок модификаторов ссылка 9) Использовать UseBackQ при чтении содержимого файла, имя которого может меняться ссылка 25) Получение даты и времени файла через цикл и команду For без ключа /S (рекурсия) и подпрограммы ссылка Кодировка 4) Сохранение BAT-файла с кодировкой перевода строк в UNIX-стандарте ссылка 26) Кодировка в консоли ссылка 27) Текстовой файл не читается циклом по неизвестной причине ссылка Тесты, оптимизация и граничные возможности интерпретатора 15) Граничные значения для числового типа в CMD ссылка 19) Максимальная глубина рекурсии = 593*. ссылка 20) Максимальная длина значения строки ссылка 21) Оптимизация кода ссылка 22) Тест замедления работы операторов при перегрузке оперативной памяти ссылка Другое 1) Указывая метку подпрограммы, можно через пробел указывать ее описание. Среда не будет "ругаться" ссылка 11) Внимательно выбирайте имя для BAT(CMD)-файла ссылка
0
|
|
| 10.01.2013, 15:41 | |
|
Ответы с готовыми решениями:
116
Ошибки при запуске bat-файлов
Как определить количество цветов в подгружаемом рисунке и наиболее частые цвета |
|
741 / 339 / 134
Регистрация: 17.03.2014
Сообщений: 842
|
|
| 07.10.2015, 20:44 | |
|
0
|
|
|
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
|
|
| 09.10.2015, 11:48 | |
|
0
|
|
|
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
|
|||||||||||
| 09.10.2015, 12:08 | |||||||||||
|
А мне недавно здесь попался такой код:
0
|
|||||||||||
|
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
|
|||||||
| 09.10.2015, 13:02 | |||||||
- работает?
0
|
|||||||
|
|
|
| 09.10.2015, 18:18 | |
|
0
|
|
|
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
|
||
| 10.10.2015, 11:05 | ||
|
0
|
||
|
|
|||||||||||
| 21.10.2015, 20:32 [ТС] | |||||||||||
|
Выполнение такой команды проигнорируется, если записано последней строкой батника:
2
|
|||||||||||
|
Любознательный
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
|
||||||||||||
| 21.04.2016, 14:53 | ||||||||||||
И ещё, тоже по теме,особенность консоли: Пока нигде не попадалось описание (обнаружено опытным путем) отличающейся работы команды set в сценарии с расширением .bat и .cmd:
0
|
||||||||||||
|
|
||||||||||||
| 21.04.2016, 15:26 [ТС] | ||||||||||||
|
YuS_2, спасибо за замечание и наблюдение.
Действительно, судя по Вашему примеру последовательность раскрытия переменных может действовать и в другом порядке для случая с операцией подстановки. При чем это работает только для операнда замены. Если отложенное раскрытие применить для заменяемого операнда или имени переменной, то замены не произойдет.
0
|
||||||||||||
|
Любознательный
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
|
||||||||
| 21.04.2016, 19:43 | ||||||||
|
Эта реализация, конечно, имеет свои недостатки и она не очень универсальна, но главное, что она возможна и работает. Поэтому может быть, имеет смысл, заменить определение "правильно-неправильно" на "рекомендуется-не рекомендуется"? ещё добавление, на предмет перевода строки: Пролистал топик и не попался на глаза следующий трюк с текстом:
0
|
||||||||
| 21.04.2016, 20:15 [ТС] | |||
|
Не по теме:
0
|
|||
|
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
|
||
| 23.04.2016, 23:58 | ||
|
1
|
||
|
|
|||||||
| 24.04.2016, 01:22 [ТС] | |||||||
|
1. b><a><r
2. %b!cr!a!cr!r% Но ведь тогда пришлось бы раскрыть вот такую переменную окружения - b!cr!a!cr!r Добавлено через 7 минут В итоге получится !b!cr!a!cr!r! = crcr Добавлено через 11 минут Скорее всего вы правы. Последовательность не нарушается. Просто на последней стадии замены срабатывает механизм раскрытия переменных, иначе бы мы увидели другой вывод:
Во второй строке "b" не раскрывается и поэтому !b! целиком заменяется на пробел (cr).
0
|
|||||||
|
1748 / 353 / 41
Регистрация: 15.10.2012
Сообщений: 550
|
|||||||
| 24.04.2016, 01:46 | |||||||
|
То же без замены:
1
|
|||||||
|
Любознательный
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
|
|
| 27.04.2016, 09:53 | |
|
0
|
|
| 27.04.2016, 16:40 [ТС] | |
|
Не по теме: YuS_2, смотря что считать правильным. Для рядовых задач Вам такое может вообще никогда не понадобится. А на счет примера выше, просто запустите, и посмотрите, что получится.
0
|
|
|
Любознательный
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
|
||||
| 27.04.2016, 16:54 | ||||
0
|
||||
|
|
|
| 27.04.2016, 17:03 [ТС] | |
|
Последовательность не ламается:
1. set "foo=%foo%" %foo% - заменяется на значение переменной foo, а это - b!cr!a!cr!r 2. Поскольку в данный момент уже включен режим отложенного раскрытия переменных, то в добавок после этого второй операцией идет раскрытие переменных внутри !! Итого результат - b a r Поэтому оба синтаксиса годятся, просто используются в разных ситуациях в зависимости от конкретного назначения (задания).
0
|
|
|
Любознательный
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
|
||||
| 27.04.2016, 22:07 | ||||
|
Всего лишь, имел ввиду неточность ссылки:
0
|
||||
| 27.04.2016, 22:07 | |
|
Ошибки при создании заметки Частые ошибки Частые ошибки winapi Частые ошибки в работе компьютера Частые системные ошибки windows 8 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|