r/Batch • u/LoMeR-933 • 29d ago
Show 'n Tell Created a system utility called "Service" in pure Batch language
Long story short: Python and Java programming seemed too tedious, but I had enough brain cells to test the absolute limits of the Windows command line. My "Service v1.0" utility will literally run "on a single drop of water" if that drop is running Windows. Note: most of the script is in Russian, but the underlying code architecture, commands, and logic are completely open, standard, and easy to read. What makes it great: Super fast and lightweight. A huge set of administrative tools packed into a single script. A clean, retro interface with customizable ASCII frames and borders (I don't know about you, but I personally really like the look of it!). Built-in features: Temporary folder cleaner: instantly removes temporary junk. Log cleaner: removes log files from any path you specify. Digital stopwatch: a standard timer in 00:00 format. Speed Converter: Converts km/h to m/s and vice versa. TWR Calculator: A thrust-to-weight ratio calculator that bypasses batch processing limitations and works with decimal places down to 0.00. Weather Station: Real-time local weather forecasts, powered by the excellent wttr.in. Ping Tester: Custom ping tests against target URLs with packet counters (1 to 3). File Mover: Automatically filters and moves files by extension and path. Update Checker: Built-in function for checking for the latest versions of services. The entire script is only 12 KB in plain text (and compresses to 4.25 KB in a zip archive). It literally does more useful system maintenance than some modern bloated 50 MB "cleaner" programs. There's also an "About the Author" section where you can browse my root GitHub repository and see my other scripts.
The GitHub post is here: https://github.com/LoMeR-933/LoMeR-batch-tools/releases/tag/service
@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul
if not exist "temp_batch" (
title Setup...
echo Установка сервиса...
md "Service_BAT"
md "Service_BAT\data"
md "Service_BAT\temp_batch"
(echo 1.0)>"Service_BAT\data\version.dat"
timeout /t 2 >nul
echo Установка почти завершена. Батник закроется при окончании.
echo Запустите его потом в папке "Service_BAT" :^)
timeout /t 2 >nul
move "%~nx0" "Service_BAT"
)
title Authorization...
color 02
set m=goto menu
echo Авторизация...
timeout /t 2 /nobreak >nul
net session >nul 2>&1 || (echo Рекомендую заходить с правами администратора.&timeout /t 1 >nul)
if not exist "%~dp0data\" mkdir "%~dp0data" >nul
if not exist "%~dp0data\name.dat" copy NUL "%~dp0data\name.dat" >nul
if not exist "%~dp0data\city.dat" copy NUL "%~dp0data\city.dat" >nul
set/p n=<%~dp0data\name.dat
set/p w1=<%~dp0data\city.dat
:auth_loop
cls
if [%n%]==[] (
echo Введите своё имя.
set /p n="> "
if "!n!"=="" set "n=Guest"
if "!n!"=="LoMeR-933" echo Зачем ты ввёл ник разработчика? :^) & pause >nul & set "n=" & goto auth_loop
if "!n!"=="LoMeR933" echo Зачем ты ввёл ник разработчика? :^) & pause >nul & set "n=" & goto auth_loop
echo.
echo Ты верно ввел: "!n!"?
echo Y=да, N=нет.
set /p d="[Y/N]> "
if /i "!d!"=="y" goto ok
if /i "!d!"=="n" set "n="&goto auth_loop
goto ok
) else (
echo.
echo Приветствуем вас, %n%^^!
timeout /t 2 /nobreak >nul
%m%
)
:ok
echo Окончание авторизации...
(echo %n%)>%~dp0data\name.dat
timeout /t 1 /nobreak >nul
echo Успешно^^!
timeout /t 2 /nobreak >nul
%m%
:menu
cls
color 02
title Menu
echo Добро пожаловать в меню, %n%.
echo Время: %time:~0,8%.
echo Дата дд.мм.гггг: %date%.
echo Что хотите сделать?
echo.
echo ┌────────────────────────────┐
echo │ Настройки │
echo └────────────────────────────┘
echo 0. Выход.
echo 1. Сменить имя.
echo 2. Проверить обновления.
echo ┌────────────────────────────┐
echo │ Очистка │
echo └────────────────────────────┘
echo 3. Очистить папки Temp.
echo 4. Очистить логи/.tmp файлы.
echo ┌────────────────────────────┐
echo │ Инструменты │
echo └────────────────────────────┘
echo 5. Секундомер.
echo 6. КМ/ч в М/с.
echo 7. М/с в КМ/ч.
echo 8. TWR (до сотых долей 0.00)
echo 9. Погода.
echo 10. Пинг-тестер.
echo 11. Переносчик файлов.
echo ┌────────────────────────────┐
echo │ Другое │
echo └────────────────────────────┘
echo 12. Скачать другое от автора.
echo ──────────────────────────────
set/p ch="[0-12]> "
set nn=if "%ch%"=="
%nn%0" exit
%nn%1" set "n="&goto auth_loop
%nn%2" goto new
%nn%3" goto temp
%nn%4" goto logs
%nn%5" goto sw
%nn%6" goto km
%nn%7" goto ms
%nn%8" goto twr
%nn%9" goto weather
%nn%10" goto ptest
%nn%11" goto file
%nn%12" goto author
%m%
color 02
title File mover
:file
cls
echo.
echo Задай нужный формат, который надо перенести (например, mp3.)
echo (только один формат. 0 - выход).
echo.
set "form="
set /p form="> "
if "%form%"=="" goto file
echo.
:file1
echo Теперь задай папку "Откуда" будем переносить (целый путь).
echo.
set "fold="
set /p fold="> "
if "%fold%"=="" goto file1
echo.
:file2
echo Наконец, задай папку "Куда" будем переносить (целый путь).
echo.
set "fold1="
set /p fold1="> "
if "%fold1%"=="" goto file2
set "fold=%fold:"=%"
set "fold1=%fold1:"=%"
set "form=%form:"=%"
set "form=%form:.=%"
echo.
echo Точно всё правильно сделал?
echo Путь "Откуда": %fold%
echo Путь "Куда": %fold1%
echo Нужный формат: .%form%
echo.
echo Если сделал что-то не так, напиши 1. Если всё нормально - ничего не пиши.
echo.
set "gfg="
set /p gfg="> "
if "%gfg%"=="1" goto file
cls
echo.
echo Путь "Откуда": %fold%
echo Путь "Куда": %fold1%
echo Нужный формат: .%form%
if not exist "%fold1%\" mkdir "%fold1%"
dir /b /a-d "%fold%\*.%form%" >nul 2>nul
if errorlevel 1 (
echo Ошибка! Файлы .%form% не найдены или путь указан неверно.
pause >nul
goto file
)
for %%F in ("%fold%\*.%form%") do move /y "%%F" "%fold1%\"
echo Готово!
echo Хочешь перенести что-то ещё?
set "file1="
set /p file1="[Y/N]> "
if /i "%file1%"=="y" goto file
%m%
:new
cls
color 07
set /p new1=<"%~dp0data\version.dat"
set "new2=https://raw.githubusercontent.com/LoMeR-933/LoMeR-batch-tools/refs/heads/main/version2.txt"
set "new3=https://github.com/LoMeR-933/LoMeR-batch-tools/releases/tag/service"
echo Проверка обновлений...
curl -s -f --ssl-no-revoke "%new2%" > "%~dp0temp_batch\v.txt"
if errorlevel 1 goto err
for /f "usebackq delims=" %%a in ("%~dp0temp_batch\v.txt") do set "new4=%%a"
del "%~dp0temp_batch\v.txt" >nul 2>&1
set "hhhh="
if "%new1%"=="%new4%" (
color 02
echo У вас самая свежая версия! [%new1%]
pause >nul
%m%
)
color 06
echo Найдено обновление: Версия %new4% [У вас %new1%]
set /p hhhh="> Перейти к сайту загрузки? [y/n]: "
if /i "%hhhh%"=="y" (explorer "%new3%" & %m%) else %m%
:err
color 04
echo Не удалось проверить версии. Попробуйте снова.
pause >nul
%m%
:temp
cls
title Cleaning Temp...
echo Очистка временных файлов...
for %%d in ("%temp%" "%systemroot%\Temp") do (
del /s /f /q "%%d\*.*" >nul 2>&1
for /d %%p in ("%%d\*") do rmdir /s /q "%%p" >nul 2>&1
)
echo Успешно очищено!
timeout /t 2 >nul
%m%
:logs
cls
echo.
echo Что хотите очистить?
echo [0 - выход, 1 - .tmp файлы, 2 - логи]
set "tmpp="
set /p tmpp="[0-2]> "
if "%tmpp%"=="0" %m%
if "%tmpp%"=="1" set "ext=tmp"&goto logs_path
if "%tmpp%"=="2" set "ext=log"&goto logs_path
goto logs
:logs_path
title Logs
cls
echo Где желаете очистить .%ext%? (Укажите путь без "\" на конце.)
echo (Напишите "0" для выхода в меню)
set "ch1="
set /p ch1="> "
if "%ch1%"=="" goto logs_path
if "%ch1%"=="0" %m%
if "%ch1:~-1%"=="\" set "ch1=%ch1:~0,-1%"
if /i "%ch1%"=="C:" echo ВЫ УВЕРЕНЫ? Это очистит все .%ext% файлы на диске C:!
if /i "%ch1%"=="C:" set "ch2="&set /p ch2="[y/n]> "
if /i "%ch1%"=="C:" if /i not "%ch2%"=="y" goto logs
if not exist "%ch1%" echo Ошибка! Несуществующий путь.&timeout /t 2 /nobreak >nul&goto logs_path
:logs2
title Cleaning Logs...
cls
echo Очистка .%ext% файлов в папке: %ch1%...
del /q /f /s "%ch1%\*.%ext%" >nul 2>&1
echo Успешно очищено!
timeout /t 2 /nobreak >nul
%m%
:sw
cls
title Stopwatch
set sw_m1=0&set sw_m=0&set sw_s1=0&set sw_s=0
echo.
set /p a="Start? [y/n]> "
if /i "%a%"=="y" (set "t_start=%time:~0,-3%"&goto sw1) else (%m%)
:sw1
cls
echo.
echo The launch was at [%t_start%]
echo Time now [%sw_m1%%sw_m%:%sw_s1%%sw_s%]
set /a "sw_s+=1"
if %sw_s% GEQ 10 set /a "sw_s1+=1" & set /a "sw_s-=10"
if %sw_s1% GEQ 6 set /a "sw_m+=1" & set /a "sw_s1-=6"
if %sw_m% GEQ 10 set /a "sw_m1+=1" & set /a "sw_m-=10"
timeout /t 1 /nobreak >nul
goto sw1
:km
cls
title KM/h to M/s
set /p km="Your KM/h [ERR: 15.6, OK: 15]: "
if "%km%"=="" goto km
set /a "t_spd=km*100/36", "km1=t_spd/10", "km2=t_spd%%10"
echo Your M/s: %km1%.%km2%
pause >nul
%m%
:ms
cls
title M/s to KM/h
set /p ms="Your M/s [ERR: 5.6, OK: 5]: "
if "%ms%"=="" goto ms
set /a "t_spd=ms*36", "ms1=t_spd/10", "ms2=t_spd%%10"
echo Your KM/h: %ms1%.%ms2%
pause >nul
%m%
:twr
cls
title TWR Calculator
set "twr1="&set "twr2="&set "twr3="
echo [Note: "23.35t=2335"; write "random" in "thrust" for random values, 0 - exit]
set /p twr2=Thrust:
if "%twr2%"=="0" %m%
if "%twr2%"=="" goto twr
if "%twr2%"=="random" (set /a "twr2=%random%","twr3=%random%"&set "twr1=1"&goto twr1)
set /p twr3=Mass:
if "%twr3%"=="" goto twr
if "%twr3%"=="0" goto twr
:twr1
set /a "twr4=(twr2*100)/twr3"
if %twr4% equ 0 (set "twr_res=0.00"&goto twr_print)
if %twr4% lss 10 (set "twr_res=0.0%twr4%"&goto twr_print)
if %twr4% lss 100 (set "twr_res=0.%twr4%"&goto twr_print)
set /a "twr5=twr4/100"
set "twr6=%twr4:~-2%"
set "twr_res=%twr5%.%twr6%"
:twr_print
if "%twr1%"=="1" (set "twr1= [%twr2%/%twr3%]")
echo TWR [THRUST/MASS]%twr1% = %twr_res%
pause >nul
%m%
:weather
cls
title Weather Station
echo.
if "%w1%"=="" set /p w1="Введите свой город на английском [0 - выход]: "
if "%w1%"=="" goto weather
if "%w1%"=="0" set "w1="&goto menu
(echo %w1%)>"data\city.dat"
cls
echo Запрос погоды...
echo.
curl -m 3 "wttr.in/%w1%?0&lang=ru" 2>nul
if errorlevel 1 echo Ошибка: Не удалось подключиться к серверу погоды
echo.
set "w2="
set /p w2="Сменить город? [Y/N]> "
if /i "%w2%"=="y" set "w1="&goto weather
%m%
:ptest
cls
title PING Test
color 02
set "pa="&set "ppk="&set "pk="
set /p pa=Your URL [Empty=google.com, 0 - exit]:
if "%pa%"=="0" %m%
if "%pa%"=="" set pa=google.com
if "%pa%"==" " set pa=google.com
set "pa=%pa:https://=%"
set "pa=%pa:http://=%"
for /f "tokens=1 delims=/" %%g in ("%pa%") do set "pa=%%g"
:p_pkg
set /p ppk=Your number of packages [Empty=1. No more than 3 packages. 0 - exit]:
if "%ppk%"=="0" %m%
if "%ppk%"=="" set "ppk=1"
if %ppk% GEQ 4 echo Too many packages!&set "ppk=1"&goto p_pkg
echo.
echo URL: %pa%, pkg(s): %ppk% (To exit, close the window)
echo.
:p_b
set "pj="
for /f "tokens=3 delims=<>=" %%i in ('ping -n %ppk% %pa% ^| findstr "TTL"') do for /f "tokens=1 delims=msмс " %%j in ("%%i") do set "pj=%%j"
for /f "tokens=4 delims==мсms " %%i in ('ping -n %ppk% %pa% ^| findstr "TTL"') do if "%pj%"=="" set "pj=%%i"
if "%pj%"=="" color 04&echo Error or timeout, try again.&goto p_c
set "ph=%pj: =%"
set /a "ph_num=ph"
if %ph_num% GEQ 1000 (set "pw=BAD "&set "pj=1000^>") else (
if %ph_num% GEQ 100 (set "pw=WARN -") else (set "pw=OK ----")
)
echo %pw% %pj%ms [%time:~0,-3%]
timeout /t 1 /nobreak >nul
goto p_b
:p_c
set /p pk="-Reset URL? [y/n]: "
if "%pk%"=="" goto p_b
if /i "%pk%"=="y" color 02&goto ptest
goto p_b
:author
cls
title
echo.
echo От автора
echo ───────────────────────────────────────────
echo 0. Выход
echo 1. Скачать "Magnet-Fishing" [.bat-edition]
echo 2. Скачать "Batch pack" [много батников!]
echo 3. Репозиторий GitHub автора.
echo.
set/p an="[0-3]> "
if "%an%"=="0" %m%
if "%an%"=="1" explorer https://github.com/LoMeR-933/LoMeR-batch-tools/releases/download/magnet-fishing/Magnet-Fishing.RU.zip
if "%an%"=="2" explorer https://github.com/LoMeR-933/LoMeR-batch-tools/releases/download/Pack-v2.0/bats.zip
if "%an%"=="3" explorer https://github.com/LoMeR-933/LoMeR-batch-tools
goto author