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

Русский текст в консоли CMD/BAT Решение и ответ на вопрос 738351

Написав в блокноте Windows (Notepad.exe) батник 1.bat такого содержания

Bash

@Echo off
Echo Введите текст. Завершение ввода - комбинация Ctrl+Z {ENTER}
copy con temp.txt

мы получим «абракадабру»:

Почему так происходит?
Консоль работает в кодировке DOS (codepage 866).
Блокнот Windows создает пакетный файл в кодировке WIN (codepage 1251).

Поэтому, когда Вы запускаете файл, консоль отображает его в своей (DOS) кодировке.

Решение (3 способа):

1 способ (сохранение файла в кодировке OEM-866):
Скачаем текстовый редактор, поддерживающий сохранение текста в кодировке OEM-866 (DOS):

AkelPad

Чтобы создать новый файл в кодировке DOS:
Меню «Файл» -> «Сохранить как…» -> из выпадающего списка выбрать «Кодировка OEM-866«.
Файл должен иметь расширение bat или cmd.

Для себя я настроил AkelPad так, чтобы он всегда сохранял в кодировке OEM-866 (Настройки -> Параметры -> Кодировка по-умолчанию -> OEM-866.)

Скачать.
Сам пользуюсь вот такой модификацией что и Вам советую. Скачать.
Или качаем с официального сайта.

Чтобы правильно

сконвертировать уже имеющийся в редакторе код с кириллицей:
Войти в редактор.
1) Ctrl+A, скопировать код.
2) Удалить код.
3) Меню «Кодировки» -> выбрать «Сохранить в DOS-866«.
4) Вставить код.
5) Сохранить, запустить.

Полезные горячие комбинации клавиш:
Запуск скрипта (Ctrl + F5)
На весь экран (F11)
Сохранить (Ctrl + S)
Открыть в кодировке WIN (Alt + W)
Открыть в кодировке DOS (Alt + D)


Notepad++

Чтобы создать новый файл в кодировке DOS:
Меню «Кодировки» -> «Кодировки» -> «Кириллица» -> «OEM-866«
«Файл» -> «Сохранить как…» -> пишем имя файла и расширение bat или cmd -> Сохранить.

Чтобы правильно

сконвертировать уже имеющийся в редакторе код с кириллицей:
Войти в редактор.
1) Ctrl+A, скопировать код.
2) Удалить код.
3) Меню «Кодировки» -> «Кодировки» -> «Кириллица» -> «OEM-866«
4) Вставить код.
5) Сохранить, запустить.

Скачать редактор с официального сайта.

Помните: в редакторе не должно быть видно «крякозябер», иначе это значит: Вы неправильно скопировали код.
В Windows Vista, 7 часто бывает, что код с форума «портиться» в буфере. Выход:

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

2 способ (смена кодовой страницы):
Сменить кодовую страницу консоли.

А именно, в начале пакетного файла написать:

Это поможет Вам только частично.
Что можно?

Создаст папку «Моя папка» с нормальными символами.

Что нельзя:

Все равно выведет текст «абракодаброй».
Кроме того, текст сообщений от команд консоли тоже станет нечитаемым.

Но русский текст все равно можно вывести таким трюком:

2а)

Bash
1
2
chcp 1251 >nul
for /f "delims=" %%A in ("Мой текст") do >nul chcp 866& echo.%%A

2б)

Bash
1
2
3
4
5
chcp 1251 >NUL
set x=Русский текст
chcp 866 >NUL
echo %x%
pause

3 способ (для ленивых):
(или для тех, кто не может установить себе продвинутый редактор по религиозным или др. причинам )
Конвертируем Batch-файл правым кликом мыши ^_^

Пример для Windows 7:
1) Пуск -> в поисковой строке набрать Shell:SendTo
2) Откроется папка, в которую нужно скопировать RecodeToDOS.vbs из этого архива.

Использование:
Правый клик мыши по Batch-файлу -> Отправить -> RecodeToDOS
Файл будет заменен перекодированной версией.

Код исходника

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
On Error Resume Next
FullName = WScript.Arguments(0)
 
With CreateObject("ADODB.Stream")
    .Type = 2
    .Charset = "windows-1251"
    .Open
    .LoadFromFile FullName
    Text = .ReadText()
    .Close
 
    .Charset = "cp866"
    .Open
    .WriteText (Text)
    .SaveToFile FullName, 2
    .Close
End with

Старый вариант: перекодировщик на языке Batch. Может некорректно работать со спецсимволами.

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

Скачать код архивом.

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@echo off
if "%1"=="" (Echo Перетащите .bat/.cmd файл на этот сценарий& Goto :ext)
Setlocal
set Src=%~dpnx1
chcp 1251> nul
for /f "UseBackQ delims=" %%a in ("%Src%") do (
  if not defined cpReady (
    chcp 866> nul
    set CpReady=True
  )
  call :convert "%%a"
)
Echo Файл %~nx1 перекодирован.
:ext
pause>nul
goto :eof
 
:convert
if Defined Write (
    echo %~1>>"%Src%"
) else (
    Set Write=True
    echo %~1>"%Src%"
)

Способ 3а. Ухищренный (для истинных кодеров).
Писать в блокноте кириллический текст в виде псевдосимволов (т.е. вручную перекодировать) ALT + код символа (на цифровой клавиатуре) Обсуждаем здесь

Способ 4. Он-лайн перекодировщик

Способ 5. Использовать стороннее ПО.

Обсуждения прошу вести в теме: Русский язык в командной строке
Обзор других редакторов: Кто какие программы использует для написания батников?

Хотелось бы узнать, каким способом в файлах с расширением .bat можно писать русским языком без иероглифов?

Nicolas Chabanovsky's user avatar

задан 12 янв 2012 в 16:40

I'm so sorry's user avatar

I’m so sorryI’m so sorry

2791 золотой знак2 серебряных знака18 бронзовых знаков

0

chcp 1251
echo тест
pause

Только шрифт консоли нужно поменять на Lucida Console или Consolas

ответ дан 12 янв 2012 в 19:03

insolor's user avatar

insolorinsolor

44.2k15 золотых знаков52 серебряных знака92 бронзовых знака

1

Файлы создаются в кодировке cp866, поэтому надо задавать charset=cp866.

Nicolas Chabanovsky's user avatar

ответ дан 12 янв 2012 в 16:43

vv-d's user avatar

3

Мне помогло следующее решение:

chcp 65001
echo тест
pause

ответ дан 28 авг 2019 в 5:24

Vitaliy's user avatar

Вообще, вот отличная таблица современных кодировок для виндового терминала.

Так, chcp с параметром 1251 поставит русскую кодировку, т.е CP1251(Windows-1251), а
с параметром 65001 — интернациональную кодировку UTF-8.

ответ дан 23 июн 2012 в 19:30

Free_man's user avatar

Free_manFree_man

9504 золотых знака14 серебряных знаков22 бронзовых знака

Вам надо NotePad++. Потому что если поменять кодировку например на OEM 866 и напишите в батнике @chcp 866 то он будет понимать русский язык. Так работает даже если вы поменяете OEM 866 на OEM 855 и @chcp 866 на @chcp 855. (Цифры должны быть одинаковыми). У меня так работает :)

ответ дан 11 окт 2022 в 18:11

user523190's user avatar

Время чтение: 4 минуты
2014-01-19

Как корректно отобразить Русский текст в CMD. Проблемы с кодировкой могут возникнуть, например, при выполнении Bat файла, когда нужно вывести в консоль русский текст и при других обстоятельствах, о которых речь пойдёт далее.

Рассмотрим пример: когда нужно вывести в консоль Русский текст, скажем «Примет мир». Для этого создадим Bat файл с именем «1.bat». Используйте для этого обычный Блокнот Windows (Notepad.exe) Запишем в него  следующие строки!

@Echo off

  echo.

     echo ПРИВЕТ МИР

    echo.

Pause

Для тех, кто не понял или не в курсе, строчки «echo.» я добавил специально, что бы были отступы, от строки «Примет мир»

Теперь запускаем файл 1.bat и результат будет такого вида.

Русский текст в CMD

Как видим проблема с кодировкой в cmd на лицо. И произошло это по следующей причине.

Стандартный блокнот Windows сохранил Bat файл в кодировке «1251» а консоль вывела его в кодировки «866». Вот от сюда все проблемы!

Решения проблемы с кодировкой в CMD. 1 Способ.

Для решения проблемы нужно просто использовать текстовой редактор, с помощью которого можно сохранить текст в кодировке «866». Для этих целей прекрасно подходит «Notepad++» (Ссылку для загрузки Вы можете найти в моём Twitter-e).

Скачиваем и устанавливаем на свой компьютер «Notepad++».

После запуска «Notepad++» запишете в документ те же строки, которые мы уже ранние записывали в стандартный блокнот.

@Echo off

  echo.

     echo ПРИВЕТ МИР

    echo.

Pause

Теперь осталось сохранить документ с именем «2.bat» в правильной кодировке. Для этого идём в меню «Кодировки > Кодировки > Кириллица > OEM-866»

cmd сменить кодировку

и теперь сохраняем файл с именем «2.bat» и запускаем его! Поле запуска результат на лицо.

cmd смена кодировки

Как видим, текст на Русском в CMD отобразился, как положено.

Решения проблемы с кодировкой в CMD. 2 Способ.

Теперь рассмотрим ещё одну ситуацию, когда могут возникнуть проблемы с кодировкой в CMD.

Допустим, ситуация требует сохранить результат выполнения той или иной команды в обычный «TXT» файл. В приделах этого поста возьмём для примера команду «HELP».

Задача: Сохранить справку CMD в файл «HelpCMD.txt. Для этого создайте Bat файл и запишите в него следующие строки.

@Echo off

Help > C:HelpCMD.txt

Pause

После выполнения Bat файла в корне диска «C:» появится файл «HelpCMD.txt» и вместо справки получится вот что:

поменять кодировку cmd

Естественно, такой вариант не кому не понравится и что бы сохранить справку в понятном для человека виде, допишите в Bat файл строку.

Теперь содержимое кода будет такое.

@Echo off

chcp 1251 >nul

Help > C:HelpCMD.txt

Pause

После выполнения «Батника» результат будет такой:

поменять кодировку cmd

Вот так на много лучше, правда?

Пожалуй, на этом я закончу пост. Добавить больше нечего. Если у Вас имеются какие-то соображения по данной теме, буду рад Вашему комментарию к посту.

Дополнительно из комментариев то Garric

Автор очень хорошо описал принцип. ! Но это неудобно.
Нужно бы добавить. Если автор добавит это в статью то это будет Good.
Создаём файл .reg следующего содержания:
——
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT.batShellNew]
«FileName»=»BATНастроенная кодировка.bat»
——
Выполняем.
——
Топаем в %SystemRoot%SHELLNEW
Создаём там файл «BATНастроенная кодировка.bat»
Открываем в Notepad++
Вводим любой текст. (нужно!) Сохраняемся.
Удаляем текст. Меняем кодировку как сказано в статье. Сохраняемся.
———-
Щёлкаем правой кнопкой мыши по Рабочему столу. Нажимаем «Создать» — «Пакетный файл Windows».
Переименовываем. Открываем в Notepad++. Пишем батник.
В дальнейшем при работе с файлом не нажимаем ничего кроме как просто «Сохранить». Никаких «Сохранить как».


Windows

  • 09.06.2020
  • 62 141
  • 6
  • 150
  • 147
  • 3

Настройка кодировки шрифтов в cmd/bat (иероглифы, кракозябры)

  • Содержание статьи
    • Исправляем проблему с кодировкой с помощью смены шрифта
    • Исправляем проблему с кодировкой с помощью смены кодировки
    • Комментарии к статье ( 6 шт )
    • Добавить комментарий

В некоторых случаях, когда используется неверная кодировка, могут возникать так называемые кракозябры или иероглифы, т.е. не читаемые символы, которые невозможно разобрать при работе с командной строкой. Эти проблемы могут также возникать и при запуске различных BAT-файлов. В данной статье мы расскажем о том, как можно сменить шрифт или кодировку, чтобы избавиться от этой проблемы. Пример таких не читаемых символов можно видеть на картинке ниже:

Исправляем проблему с кодировкой с помощью смены шрифта

Первым делом нужно зайти в свойства окна: Правой кнопкой щелкнуть по верхней части окна -> Свойства -> в открывшемся окне в поле Шрифт выбрать Lucida Console и нажать кнопку ОК.
После этого не читаемые символы должны исчезнуть, а текст должен выводиться на русском языке.

Исправляем проблему с кодировкой с помощью смены кодировки

Вместо смены шрифта, можно сменить кодировку, которая используется при работе cmd.exe.
Узнать текущую кодировку можно введя в командной строке команду chcp, после ввода данной команды необходимо нажать Enter.

Как видно на скриншоте, текущая используемая кодировка Windows-1251
Для изменения кодировки нам необходимо воспользоваться командой chcp <код_новой_кодировки>, где <код_новой_кодировки> — это сам код кодировки, на которую мы хотим переключиться. Возможные значения:

  • 1251 — Windows-кодировка (Кириллица);
  • 866 — DOS-кодировка;
  • 65001 — Кодировка UTF-8;

Т.е. для смены кодировки на DOS, команда примет следующий вид:

chcp 866

Для смены кодировки на UTF-8, команда примет следующий вид:

chcp 65001

Для смены кодировки на Windows-1251, команда примет следующий вид:

chcp 1251

I care about three concepts:

  1. Output Console Encoding

  2. Command line internal encoding (that changed with chcp)

  3. .bat Text Encoding

The easiest scenario to me: I will have the first two mentioned in the same encoding, say CP850, and I will store my .bat in that same encoding (in Notepad++, menu EncodingCharacter setsWestern EuropeanOEM 850).

But suppose someone hands me a .bat in another encoding, say CP1252 (in Notepad++, menu Encoding* → Character setsWestern EuropeanWindows-1252)

Then I would change the command line internal encoding, with chcp 1252.

This changes the encoding it uses to talk with other processes, neither the input device nor output console.

So my command line instance will effectively send characters in 1252 through its STDOUT file descriptor, but gabbed text appears when the console decodes them out as 850 (é is Ú).

Then I modify the file as follows:

@echo off

perl -e "use Encode qw/encode decode/;" -e "print encode('cp850', decode('cp1252', "ren -hlice hlicen"));"
ren -hlice hlice

First I turn echo off so the commands don’t output unless explicitly doing either echo… or perl -e «print…»

Then I put this boilerplate each time I need to output something

perl -e «use Encode qw/encode decode/;» -e «print encode(‘cp850’, decode(‘cp1252’, «ren -hélice hélicen»));»

I substitute the actual text I’ll show for this: ren -hélice hélice.

And also I could need to substitute my console encoding for cp850 and other side encoding for cp1252.

And just below I put the desired command.

I did broke the problematic line into the output half and the real command half.

  • The first I make for sure: The «é» is interpreted as an «é» by means of transcoding. It is necessary for all the output sentences since the console and the file are at different encodings.

  • The second, the real command (muttered with @echo off), knowing we have the same encoding both from chcp and the .bat text is enough to ensure a proper character interpretation.

I care about three concepts:

  1. Output Console Encoding

  2. Command line internal encoding (that changed with chcp)

  3. .bat Text Encoding

The easiest scenario to me: I will have the first two mentioned in the same encoding, say CP850, and I will store my .bat in that same encoding (in Notepad++, menu EncodingCharacter setsWestern EuropeanOEM 850).

But suppose someone hands me a .bat in another encoding, say CP1252 (in Notepad++, menu Encoding* → Character setsWestern EuropeanWindows-1252)

Then I would change the command line internal encoding, with chcp 1252.

This changes the encoding it uses to talk with other processes, neither the input device nor output console.

So my command line instance will effectively send characters in 1252 through its STDOUT file descriptor, but gabbed text appears when the console decodes them out as 850 (é is Ú).

Then I modify the file as follows:

@echo off

perl -e "use Encode qw/encode decode/;" -e "print encode('cp850', decode('cp1252', "ren -hlice hlicen"));"
ren -hlice hlice

First I turn echo off so the commands don’t output unless explicitly doing either echo… or perl -e «print…»

Then I put this boilerplate each time I need to output something

perl -e «use Encode qw/encode decode/;» -e «print encode(‘cp850’, decode(‘cp1252’, «ren -hélice hélicen»));»

I substitute the actual text I’ll show for this: ren -hélice hélice.

And also I could need to substitute my console encoding for cp850 and other side encoding for cp1252.

And just below I put the desired command.

I did broke the problematic line into the output half and the real command half.

  • The first I make for sure: The «é» is interpreted as an «é» by means of transcoding. It is necessary for all the output sentences since the console and the file are at different encodings.

  • The second, the real command (muttered with @echo off), knowing we have the same encoding both from chcp and the .bat text is enough to ensure a proper character interpretation.

Всем доброго времени суток!

Имеется следующий скрипт (ниже он приведент в упрощенном виде):

ipconfig /all > «%userprofile%script.txt»

ping 127.0.0.1 >> «%userprofile%script.txt»

ping
www.ru >> «%userprofile%script.txt»

pause

Проблема в том, что в результатирующем файле получается не нормально отображение кириллицы:

Настройка протокола IP для Windows

        Имя компьютера  . . . . . . . . . : owner-pc

        Основной DNS-суффикс  . . . . . . :

        Тип узла. . . . . . . . . . . . . : гибридный

        IP-маршрутизация включена . . . . : нет

        WINS-прокси включен . . . . . . . : нет

        Порядок просмотра суффиксов DNS . : localdomain

Подключение по локальной сети — Ethernet адаптер:

        DNS-суффикс этого подключения . . : localdomain

        Описание  . . . . . . . . . . . . : AMD PCNET семейство PCI Ethernet адаптеров

        Физический адрес. . . . . . . . . : 00-0C-29-4E-80-1F

        Dhcp включен. . . . . . . . . . . : да

        Автонастройка включена  . . . . . : да

        IP-адрес  . . . . . . . . . . . . : 192.168.253.128

        Маска подсети . . . . . . . . . . : 255.255.255.0

        Основной шлюз . . . . . . . . . . : 192.168.253.2

        DHCP-сервер . . . . . . . . . . . : 192.168.253.254

        DNS-серверы . . . . . . . . . . . : 192.168.253.2

        Основной WINS-сервер  . . . . . . : 192.168.253.2

        Аренда получена . . . . . . . . . : 14 ноября 2010 г. 17:22:54

        Аренда истекает . . . . . . . . . : 14 ноября 2010 г. 17:52:54

ЋЎ¬Ґ­ Ї ЄҐв ¬Ё б 127.0.0.1 Ї® 32 Ў ©в:

ЋвўҐв ®в 127.0.0.1: зЁб«® Ў ©в=32 ўаҐ¬п<1¬б TTL=128

ЋвўҐв ®в 127.0.0.1: зЁб«® Ў ©в=32 ўаҐ¬п<1¬б TTL=128

ЋвўҐв ®в 127.0.0.1: зЁб«® Ў ©в=32 ўаҐ¬п<1¬б TTL=128

ЋвўҐв ®в 127.0.0.1: зЁб«® Ў ©в=32 ўаҐ¬п<1¬б TTL=128

‘в вЁбвЁЄ  Ping ¤«п 127.0.0.1:

    Џ ЄҐв®ў: ®вЇа ў«Ґ­® = 4, Ї®«г祭® = 4, Ї®вҐап­® = 0 (0% Ї®вҐам),

ЏаЁЎ«Ё§ЁвҐ«м­®Ґ ўаҐ¬п ЇаЁҐ¬ -ЇҐаҐ¤ зЁ ў ¬б:

    ЊЁ­Ё¬ «м­®Ґ = 0¬бҐЄ, Њ ЄбЁ¬ «м­®Ґ = 0 ¬бҐЄ, ‘।­ҐҐ = 0 ¬бҐЄ

ЋЎ¬Ґ­ Ї ЄҐв ¬Ё б
www.ru [194.87.0.50] Ї® 32 Ў ©в:

ЋвўҐв ®в 194.87.0.50: зЁб«® Ў ©в=32 ўаҐ¬п=6¬б TTL=128

ЋвўҐв ®в 194.87.0.50: зЁб«® Ў ©в=32 ўаҐ¬п=6¬б TTL=128

ЋвўҐв ®в 194.87.0.50: зЁб«® Ў ©в=32 ўаҐ¬п=6¬б TTL=128

ЋвўҐв ®в 194.87.0.50: зЁб«® Ў ©в=32 ўаҐ¬п=6¬б TTL=128

‘в вЁбвЁЄ  Ping ¤«п 194.87.0.50:

    Џ ЄҐв®ў: ®вЇа ў«Ґ­® = 4, Ї®«г祭® = 4, Ї®вҐап­® = 0 (0% Ї®вҐам),

ЏаЁЎ«Ё§ЁвҐ«м­®Ґ ўаҐ¬п ЇаЁҐ¬ -ЇҐаҐ¤ зЁ ў ¬б:

    ЊЁ­Ё¬ «м­®Ґ = 6¬бҐЄ, Њ ЄбЁ¬ «м­®Ґ = 6 ¬бҐЄ, ‘।­ҐҐ = 6 ¬бҐЄ

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

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

Что можно сделать?

Как писать скрипты на BATCH? 🤔

Все на самом деле проще, чем кажется. 😉

Вывод текста на экран

@echo off
echo It's my the first script on BATCH!

Вывод:

It’s my the first script on BATCH!

С первого взгляда стало понятно, чтобы вывести текст на экран нужно воспользоваться командой echo.
Но что значит первая строчка @echo off? 🤔 Первая строчка отвечает за отключения «эхо», то есть, другими словами она отключает вывод командной строки. Представим, что вы ее не записали, и вот что у вас получится:

echo It’s my the first script on BATCH!
It’s my the first script on BATCH!

У вас отобразятся команды, которые вы записали в ваш скрипт, а потом их результат.

Комментарии, кодировка и перенос строки

Комментарии

Комментарии в коде чаще всего создаются, для описания какой-либо строчки или какого-либо блока кода.
Имеется несколько способов оставить комментарий:

@rem Смотри какой красивый комментарий
rem А как тебе этот комментарий?
:: И даже так можно!

Разницы не будет как вы это сделаете, комментарий не читается при исполнении скрипта — он только для вас.

Кодировка

Допустим вы захотели вывести текст в консоль, который написан кириллицей, но при выводе возникает проблема? Что это за символы?!
Для этого следует указать интернациональную кодировку UTF-8:

@echo off
@rem chcp *сюда код кодировки* (65001 это UTF-8)
chcp 65001

echo Привет, кириллица!

Перенос строк

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

@echo off
chcp 65001

echo У меня есть очень большой текст, который по сути бессмысленный и я придумываю этот текст на ходу, ^
в прямом эфире и совершенно не важно, что здесь написано. С помощью ёлочки вверх, вы сможете перенести текст ^
на следующую строку и это очень просто работает, но если вывести этот текст в консоль, он будет идти в строчку.

А что, если вы хотите вывести текст выше также, как это было и в коде? Эти ^ ёлочки не способны такого сделать, и тут можно сделать такую штуку:

@echo off
chcp 65001

set "n=&echo."
echo Это можно сказать простая табуляция.%n%Точнее обычная переменная,^
которая может спокойно перенести строчку на следующую.%n%^
Переменные мы разберем в следующей главе.

Переменные

В BATCH переменные бывают глобальные 🔓 и локальные 🔒, изначально они все глобальные, а также их несколько видов.
Глобальные переменные можно использовать повсюду, в скрипте, другом bat-файле, но только в текущей сессии. Что такое текущая сессия? 🤔 Простыми словами это открытая консоль в данный момент. Давайте разбираться, но для начала посмотрим, как можно создать самую простую переменную.

set variable_name=Simple variable

Любая переменная создается с ключевого слова set, дальше можно указать тип переменной (необязательно), после обозвать её. Значения переменной указываются после символа = без пробелов. Обычная переменная может содержать только строку (string).

@echo off
@rem Моя первая переменная, и сейчас я ее выведу на экран.

set text=Hello, world!
echo %text%

Вывод:

Hello, world!

Как вы наверное догадались, чтобы получить значение переменной, нужно обернуть название переменной в символы %.
Другой вид переменной, числовой.

С такой переменной можно проводить математические операции:

@echo off
@rem Как мне сложить два числа?

set /a number=2021 + 1
echo New %number% year

Вывод:

New 2022 year

Также можно создать две разных переменных и сложить их воедино.

@echo off

set /a number1=100
set /a number2=899
set /a result=number1 + number2

echo %number1% + %number2% = %result%

Вывод:

100 + 899 = 999

Давайте расмотрим еще один вид переменной.

@echo off

set /p input=Enter some text: 
echo %input%

Вход:

script запускаем файл
Enter some text: Don’t worry, smile!

Вывод:

Don’t worry, smile!

example

Такая переменная может принимать в себя данные, которые вы передадите.
Имеется еще один интересный вид переменной, она называется переменной аргумента.
Обозначается она таким образом: %1 %2 %3...

Вход:

script Something

Вывод:

Something

example

Когда мы запускаем наш bat-файл из консоли, мы можем передать любой аргумент после его названия: script Something.
script — название нашего файла, Something — наш желаемый аргумент. Если мы попытаемся передать несколько слов (аргументов) через пробел, то у нас засчитает только первое слово. То есть каждое новое слово по сути является новым аргументом.

Вход:

script Everything will be fine…

Вывод:

Everything

Этого можно избежать следующими способами:

  1. Указать больше переменных.
  2. Обернуть текст в кавычки " "
  3. Указать символ *
Способ первый:

Я хочу передать вот этот текст: Everything will be fine.... Здесь 4 слова (необязательно слова, после каждого нового пробела получается новый аргумент)

@echo off
echo %1 %2 %3 %4

Вход:

script Everything will be fine…

Вывод:

Everything will be fine…

Второй способ:

В этом способе я оберну текст в кавычки " "

Вход:

script «Everything will be fine…»

Вывод:

«Everything will be fine…»

Третий способ:

Вход:

script Everything will be fine…

Вывод:

Everything will be fine…

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

@echo off

set /a value=%1
echo %value%

Вход:

script 12+12

Вывод:

24

example

Локальные переменные

Локальные переменные задаются в блоке от setLocal до endLocal. Такими переменными нельзя воспользоваться за пределами блока, и также они недоступны в сессии, как глобальные.

@echo off

set global_variable=I'm Global Elite

setLocal
set local_variable=I'm... I.. nobody?...
endLocal

Попробуйте запустить этот скрипт, а после прописать в консоли echo %global_variable%, получилось?
Теперь попробуйте echo %local_variable%. Мм.. нет?
Также глобальными переменными можно пользоваться в других bat-файлах. Попробуйте создать другой файлик и к примеру вывести глобальную переменную на экран.

В принципе все просто.
Практика:

  1. Попробуйте написать скрипт, который будет принимать ваше имя и возраст, после выводить его на экран.
Ваше имя: Даниил
Ваш возраст: 17

Привет, Даниил, а знаю, что тебе 17 лет!
  1. Попробуйте сделать простой калькулятор, который будет только складывать числа.
Введите первое число: 12
Введите второй число: 12

Ответ: 24

Циклы

Цикл for (по умолчанию)

Данный цикл используется для повторения файлов, пример:

@echo off

for %%i in (C:folderfantasy.txt C:foldermyths.txt) do (
  copy %%i C:UsersuserDesktop
)

example
Разберем начало цикла, цикл создается с ключевого слова for, следующим можно указать вид цикла /r, /d, /f, /l (необязательно). Вид цикла используется в разных ситуациях, в которых вы хотите его применить. Дальше в этом разберемся.
Переменная в цикле начинается с двух символов %%, а после записывается само название (названием переменной должен служить 1 единственный символ).

В ( ) записываем пути к файлам, с которыми в будущем будем осуществлять работу.
Работа осуществляется в теле цикла, чтобы туда попасть, нужно записать ключевое слово do, открыть скобки () и приступить к написанию скрипта.
В этом случае, мы просто копируем файлы (fantasy.txt, myths.txt) в новую директорию.

Цикл for /R

Данный цикл используется для перебора файлов в директории:

@echo off

for /r C:folder %%f in (*.txt) do (
  echo %%f
)

example
Здесь мы уже указываем команду /r, следующим можно передать папку, которая будет считаться корневой, если не передавать директорию (C:folder) — текущая директория будет считаться корневой. Также поиск файлов будет осуществляться и в подпапках.
%%f — является переменной. В скобках ( ), можно передать файлы, по которым будет осуществляться поиск. Их может быть несколько (*.txt *.py *.bat) или можно записать ., она будет искать все файлы в целом (в подпапках тоже).

Цикл for /D

Используется для загрузки списка папок, которые являются подпапками текущей директории:

@echo off

cd C:folder

for /d %%f in (f* n*) do (
  echo %%f
)

example
В данном примере мы получим список папок в директории C:folder, которые начинаются с букв f и n. Если передать *, мы получим список всех папок находящихся в директории.

Цикл for /l

Этот цикл служит для загрузки на ряде цифр (range of numbers):

@echo off

for /l %%i in (1, 1, 10) do (
  echo %%i
)

example
В этом примере мы выведим цифры от 1 до 10.

for /l %%i in (start, step, end) do (
  echo %%i
)
  • start: Первое значение переменной
  • step: После каждого повтора (iteration) значение переменной будет прибавлять ‘step’.
  • end: Последнее значение.

…дописывается

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как изменить кодировка utf 8
  • Как изменить кодеки блютуз на андроид
  • Как изменить кодек файла
  • Как изменить кодек на honor
  • Как изменить кодек видеофайла на телефоне

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии