{"id":20975522,"url":"https://github.com/fsoky/batch-script","last_synced_at":"2025-07-10T20:03:01.916Z","repository":{"id":41409903,"uuid":"448243078","full_name":"Fsoky/batch-script","owner":"Fsoky","description":"Туториал: как писать скрипты на batch?","archived":false,"fork":false,"pushed_at":"2022-03-06T09:39:51.000Z","size":2669,"stargazers_count":20,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-10T21:13:12.688Z","etag":null,"topics":["bat","batch","batch-script","script","windows-batch","windows-batch-script"],"latest_commit_sha":null,"homepage":"https://www.youtube.com/watch?v=J4pkFey3DlY","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Fsoky.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-01-15T10:13:27.000Z","updated_at":"2025-04-09T13:43:01.000Z","dependencies_parsed_at":"2022-08-30T16:12:42.176Z","dependency_job_id":null,"html_url":"https://github.com/Fsoky/batch-script","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Fsoky/batch-script","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fsoky%2Fbatch-script","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fsoky%2Fbatch-script/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fsoky%2Fbatch-script/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fsoky%2Fbatch-script/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Fsoky","download_url":"https://codeload.github.com/Fsoky/batch-script/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fsoky%2Fbatch-script/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264646333,"owners_count":23643368,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bat","batch","batch-script","script","windows-batch","windows-batch-script"],"created_at":"2024-11-19T04:46:06.846Z","updated_at":"2025-07-10T20:03:01.852Z","avatar_url":"https://github.com/Fsoky.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# [Как писать скрипты на BATCH?](https://www.youtube.com/watch?v=J4pkFey3DlY) 🤔\n##### Все на самом деле проще, чем кажется. 😉\n\n## Вывод текста на экран\n```bat\n@echo off\necho It's my the first script on BATCH!\n```\nВывод:\n\u003e It's my the first script on BATCH!\n\nС первого взгляда стало понятно, чтобы вывести текст на экран нужно воспользоваться командой `echo`. \\\nНо что значит первая строчка `@echo off`? 🤔 Первая строчка отвечает за отключения \"эхо\", то есть, другими словами она отключает вывод *командной строки*. Представим, что вы ее не записали, и вот что у вас получится:\n\n\u003e echo It's my the first script on BATCH! \\\nIt's my the first script on BATCH!\n\nУ вас отобразятся команды, которые вы записали в ваш скрипт, а потом их результат.\n\n## Комментарии, кодировка и перенос строки\n### Комментарии\nКомментарии в коде чаще всего создаются, для описания какой-либо строчки или какого-либо блока кода. \\\nИмеется несколько способов оставить комментарий:\n```bat\n@rem Смотри какой красивый комментарий\nrem А как тебе этот комментарий?\n:: И даже так можно!\n```\nРазницы не будет как вы это сделаете, комментарий не читается при исполнении скрипта - он только для вас.\n\n### Кодировка\nДопустим вы захотели вывести текст в консоль, который написан кириллицей, но при выводе возникает проблема? Что это за символы?! \\\nДля этого следует указать *интернациональную кодировку UTF-8*:\n```bat\n@echo off\n@rem chcp *сюда код кодировки* (65001 это UTF-8)\nchcp 65001\n\necho Привет, кириллица!\n```\n\n### Перенос строк\nЕсли у вас в коде имеется длинная строка, которую вы хотите перенести на другую строчку, чтобы визуально это смотрелось красиво и удобно, можно воспользоваться символом `^`:\n```bat\n@echo off\nchcp 65001\n\necho У меня есть очень большой текст, который по сути бессмысленный и я придумываю этот текст на ходу, ^\nв прямом эфире и совершенно не важно, что здесь написано. С помощью ёлочки вверх, вы сможете перенести текст ^\nна следующую строку и это очень просто работает, но если вывести этот текст в консоль, он будет идти в строчку.\n```\n\nА что, если вы хотите вывести текст выше также, как это было и в коде? Эти `^` ёлочки не способны такого сделать, и тут можно сделать такую штуку:\n```bat\n@echo off\nchcp 65001\n\nset \"n=\u0026echo.\"\necho Это можно сказать простая табуляция.%n%Точнее обычная переменная,^\nкоторая может спокойно перенести строчку на следующую.%n%^\nПеременные мы разберем в следующей главе.\n```\n\n## Переменные\nВ *BATCH* переменные бывают **глобальные 🔓** и **локальные 🔒**, изначально они все глобальные, а также их несколько видов. \\\n**Глобальные переменные** можно использовать повсюду, в скрипте, другом `bat-файле`, но только в *текущей сессии*. Что такое текущая сессия? 🤔 Простыми словами это открытая консоль в данный момент. Давайте разбираться, но для начала посмотрим, как можно создать самую простую переменную.\n```bat\nset variable_name=Simple variable\n```\nЛюбая переменная создается с ключевого слова `set`, дальше можно указать тип переменной (необязательно), после обозвать её. Значения переменной указываются после символа `=` без пробелов. Обычная переменная может содержать только строку (string).\n```bat\n@echo off\n@rem Моя первая переменная, и сейчас я ее выведу на экран.\n\nset text=Hello, world!\necho %text%\n```\nВывод:\n\u003e Hello, world!\n\nКак вы наверное догадались, чтобы получить значение переменной, нужно обернуть *название переменной* в символы `%`. \\\nДругой вид переменной, числовой.\n```bat\nset /a number=2022\n```\nС такой переменной можно проводить математические операции:\n```bat\n@echo off\n@rem Как мне сложить два числа?\n\nset /a number=2021 + 1\necho New %number% year\n```\nВывод:\n\u003e New 2022 year\n\nТакже можно создать две разных переменных и сложить их воедино.\n```bat\n@echo off\n\nset /a number1=100\nset /a number2=899\nset /a result=number1 + number2\n\necho %number1% + %number2% = %result%\n```\nВывод:\n\u003e 100 + 899 = 999\n\nДавайте расмотрим еще один вид переменной.\n```bat\n@echo off\n\nset /p input=Enter some text: \necho %input%\n```\nВход:\n\u003e **script** *запускаем файл* \\\n\u003e Enter some text: Don't worry, smile!\n\nВывод:\n\u003e Don't worry, smile!\n\n![example](https://github.com/Fsoky/batch-script/blob/main/images/Screenshot_1.png)\n\nТакая переменная может принимать в себя данные, которые вы передадите. \\\nИмеется еще один интересный вид переменной, она называется *переменной аргумента*. \\\nОбозначается она таким образом: `%1 %2 %3...`\n```bat\n@echo off\necho %1\n```\nВход:\n\u003e **script** Something\n\nВывод:\n\u003e Something\n\n![example](https://github.com/Fsoky/batch-script/blob/main/images/Screenshot_2.png)\n\nКогда мы запускаем наш `bat-файл` из консоли, мы можем передать любой аргумент после его названия: `script Something`. \\\n*script* - название нашего файла, *Something* - наш желаемый аргумент. Если мы попытаемся передать несколько слов (аргументов) через пробел, то у нас засчитает только первое слово. То есть каждое *новое слово* по сути является *новым аргументом*.\n```bat\n@echo off\necho %1\n```\nВход:\n\u003e **script** Everything will be fine...\n\nВывод:\n\u003e Everything\n\nЭтого можно избежать следующими способами:\n1. Указать больше переменных.\n2. Обернуть текст в кавычки `\" \"`\n3. Указать символ `*`\n\n###### Способ первый:\nЯ хочу передать вот этот текст: `Everything will be fine...`. Здесь 4 слова (необязательно слова, после каждого нового пробела получается новый аргумент)\n```bat\n@echo off\necho %1 %2 %3 %4\n```\nВход:\n\u003e **script** Everything will be fine...\n\nВывод:\n\u003e Everything will be fine...\n\n###### Второй способ:\nВ этом способе я оберну текст в кавычки `\" \"`\n```bat\n@echo off\necho %1\n```\nВход:\n\u003e **script** \"Everything will be fine...\"\n\nВывод:\n\u003e \"Everything will be fine...\"\n\n###### Третий способ:\n```bat\n@echo off\necho %*\n```\nВход:\n\u003e **script** Everything will be fine...\n\nВывод:\n\u003e Everything will be fine...\n\n\\\nТакже на основе таких переменных можно сделать небольшой калькулятор, для этого эту переменную нужно как-бы преобразовать в числовой тип:\n```bat\n@echo off\n\nset /a value=%1\necho %value%\n```\nВход:\n\u003e **script** 12+12\n\nВывод:\n\u003e 24\n\n![example](https://github.com/Fsoky/batch-script/blob/main/images/Screenshot_3.png)\n\n### Локальные переменные\nЛокальные переменные задаются в блоке от `setLocal` до `endLocal`. Такими переменными нельзя воспользоваться за пределами блока, и также они недоступны в сессии, как глобальные.\n```bat\n@echo off\n\nset global_variable=I'm Global Elite\n\nsetLocal\nset local_variable=I'm... I.. nobody?...\nendLocal\n```\nПопробуйте запустить этот скрипт, а после прописать в консоли `echo %global_variable%`, получилось? \\\nТеперь попробуйте `echo %local_variable%`. Мм.. нет? \\\nТакже глобальными переменными можно пользоваться в других `bat-файлах`. Попробуйте создать другой файлик и к примеру вывести глобальную переменную на экран.\n\nВ принципе все просто. \\\n**Практика:**\n1. Попробуйте написать скрипт, который будет принимать ваше имя и возраст, после выводить его на экран.\n```\nВаше имя: Даниил\nВаш возраст: 17\n\nПривет, Даниил, а знаю, что тебе 17 лет!\n```\n2. Попробуйте сделать простой калькулятор, который будет только складывать числа.\n```\nВведите первое число: 12\nВведите второй число: 12\n\nОтвет: 24\n```\n\n## Циклы\n### Цикл for (по умолчанию)\n\nДанный цикл используется для повторения файлов, пример:\n```bat\n@echo off\n\nfor %%i in (C:\\folder\\fantasy.txt C:\\folder\\myths.txt) do (\n  copy %%i C:\\Users\\user\\Desktop\n)\n```\n![example](https://github.com/Fsoky/batch-script/blob/main/images/Screenshot_4.png)\nРазберем начало цикла, цикл создается с *ключевого слова* `for`, следующим можно указать *вид* цикла `/r`, `/d`, `/f`, `/l` (необязательно). Вид цикла используется в разных ситуациях, в которых вы хотите его применить. Дальше в этом разберемся. \\\nПеременная в цикле начинается с двух символов `%%`, а после записывается само название (**названием переменной должен служить 1 единственный символ**). \\\n\nВ `( )` записываем пути к файлам, с которыми в будущем будем осуществлять работу. \\\nРабота осуществляется в теле цикла, чтобы туда попасть, нужно записать *ключевое слово* `do`, открыть скобки `()` и приступить к написанию скрипта. \\\nВ этом случае, мы просто копируем файлы (*fantasy.txt*, *myths.txt*) в новую директорию.\n\n### Цикл for /R\nДанный цикл используется для перебора файлов в директории:\n```bat\n@echo off\n\nfor /r C:\\folder %%f in (*.txt) do (\n  echo %%f\n)\n```\n![example](https://github.com/Fsoky/batch-script/blob/main/images/Screenshot_5.png)\nЗдесь мы уже указываем команду `/r`, следующим можно передать папку, которая будет считаться корневой, если не передавать директорию (*C:\\folder*) - текущая директория будет считаться корневой. Также поиск файлов будет осуществляться и в подпапках. \\\n`%%f` - является переменной. В скобках `( )`, можно передать файлы, по которым будет осуществляться поиск. Их может быть несколько `(*.txt *.py *.bat)` или можно записать `.`, она будет искать все файлы в целом (в подпапках тоже). \n\n### Цикл for /D\nИспользуется для загрузки списка папок, которые являются подпапками текущей директории:\n```bat\n@echo off\n\ncd C:\\folder\n\nfor /d %%f in (f* n*) do (\n  echo %%f\n)\n```\n![example](https://github.com/Fsoky/batch-script/blob/main/images/Screenshot_6.png)\nВ данном примере мы получим список папок в директории *C:\\folder*, которые начинаются с букв `f` и `n`. Если передать `*`, мы получим список всех папок находящихся в директории.\n\n## Цикл for /l\nЭтот цикл служит для загрузки на ряде цифр (*range of numbers*):\n```bat\n@echo off\n\nfor /l %%i in (1, 1, 10) do (\n  echo %%i\n)\n```\n![example](https://github.com/Fsoky/batch-script/blob/main/images/Screenshot_7.png)\nВ этом примере мы выведим цифры от *1* до *10*. \\\n```bat\nfor /l %%i in (start, step, end) do (\n  echo %%i\n)\n```\n+ start: Первое значение переменной\n+ step: После каждого повтора (iteration) значение переменной будет прибавлять 'step'.\n+ end: Последнее значение.\n\n*...дописывается*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffsoky%2Fbatch-script","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffsoky%2Fbatch-script","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffsoky%2Fbatch-script/lists"}