Skip to content

CMD #44

Description

@abzalimovrrr

CMD — Командная строка Windows: вопросы, практические задания и ответы с кодом

100 вопросов по CMD/batch-скриптам Windows — с практическими заданиями, примерами кода и комментариями.


Темы

РазделОписание
1–10Основы CMDcd, dir, md/rmdir, copy, del, ren, move, type, cls, echo, help, exit
11–20Переменные и аргументыSET, %PATH%, %1-%9, %*, IF, SETLOCAL ENABLEDELAYEDEXPANSION, FOR, %ERRORLEVEL%, %%~dp0, SET /A
21–30Работа с файламиfind, findstr, sort, fc, attrib, xcopy, robocopy, forfiles, comp, tree
31–40Сетиipconfig, ping, tracert, nslookup, netstat, route, net use, net share, telnet/ssh, curl
41–50Диски и системаchkdsk, diskpart, format, vol/label, fsutil, wmic, systeminfo, driverquery, tasklist/taskkill, shutdown
51–60Пакетные файлы (.bat)CALL, GOTO, EXIT/B, CHOICE, PAUSE, TITLE, COLOR, DATE/TIME, SCHTASKS, START
61–70Работа с реестромREG QUERY, ADD, DELETE, COPY, EXPORT, IMPORT, LOAD, UNLOAD, COMPARE, SAVE
71–80Управление процессамиtasklist с фильтрами, taskkill, affinity/priority, WMIC, PowerShell, runas, schtasks, shutdown, управление сессиями, powercfg
81–90Продвинутые скриптыIF EXIST/DEFINED, FOR /F, FOR /R, FOR /D, SET /P, pipes/redirects, error handling ||, delayed expansion
91–100Batch best practicesструктура .bat, exit codes, логирование, .ini config, меню, backup, deploy, scheduled tasks, file watcher, интерактивные скрипты

Вопросы и ответы

ВопросКод с комментариями
1Что такое CMD и как открыть командную строку?
cmd.exe
# Или через Win+R → cmd
# Версия:
ver
# Справка:
help
2Что такое команда cd?
cd C:\Windows\System32
cd ..  # на уровень вверх
cd /d D:\Projects  # сменить диск
cd  # показать текущий путь
3Что такое команды dir и md/rmdir?
dir  # список файлов и папок
dir /w  # широкий формат
dir /s  # с подпапками
md myfolder  # создать папку
rmdir myfolder  # удалить пустую папку
rmdir /s /q myfolder  # удалить с содержимым
4Что такое команды copy и del?
copy file1.txt file2.txt
copy *.txt C:\Backup\
del file.txt  # удалить файл
del /f readonly.txt  # принудительно
del /s *.tmp  # рекурсивно
5Что такое команды ren и move?
ren old.txt new.txt
ren *.txt *.bak
move file.txt C:\Target\
move folder C:\Target\  # переместить папку
move /y file.txt C:\Target\  # без подтверждения
6Что такое команда type?
type file.txt
type file.txt | more  # постранично
type file1.txt file2.txt > combined.txt  # объединить
7Что такое команда cls?
cls
# Альтернатива:
echo off
cls
8Что такое команда echo?
echo Hello World
echo.  # пустая строка
echo off  # скрыть команды
echo %PATH%  # вывести переменную
9Что такое команда help?
help  # список всех команд
help dir  # справка по dir
dir /?  # альтернатива
help | find "copy"  # поиск по справке
10Что такое команда exit?
exit  # закрыть окно
exit /b 1  # выход из .bat с кодом 1
# В .bat:
EXIT /B 0  # успешное завершение
11Что такое SET и как объявить переменную?
SET name=John
SET age=25
echo %name%
SET PATH=%PATH%;C:\MyApp   # дополнение PATH
SET  # список всех переменных
SET name=  # удалить переменную
12Что такое %PATH% и как его изменить?
echo %PATH%
setx PATH "%PATH%;C:\MyTools"  # постоянно
# В сессии:
SET PATH=%PATH%;C:\MyApp
13Что такое %1-%9 и %*?
@echo off
echo Первый аргумент: %1
echo Второй: %2
echo Все аргументы: %*
echo Количество: %~1
echo %~nx1  # только имя файла из пути
14Что такое IF в CMD?
IF "%1"=="" (
    echo Аргумент не задан
    EXIT /B 1
)
IF EXIST file.txt (echo Файл существует)
IF %ERRORLEVEL% NEQ 0 (echo Ошибка!)
15Что такое SETLOCAL ENABLEDELAYEDEXPANSION?
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET count=0
FOR %%i IN (1 2 3) DO (
    SET /a count=count+1
    echo !count!  # важно: ! вместо %
)
ENDLOCAL
16Что такое FOR в CMD?
@echo off
FOR %%i IN (1 2 3 4 5) DO echo %%i
FOR %%f IN (*.txt) DO echo %%f
FOR /L %%i IN (1,1,10) DO (
    echo Число %%i
)
FOR /D %%d IN (*) DO rmdir /s /q %%d
17Что такое %ERRORLEVEL%?
some_command.exe
echo %ERRORLEVEL%
IF %ERRORLEVEL% NEQ 0 (
    echo Команда завершилась с ошибкой
    EXIT /B %ERRORLEVEL%
)
# или короче:
if errorlevel 1 (echo Ошибка >= 1)
18Что такое %CD%, %DATE%, %TIME%?
echo %CD%  # текущая директория
echo %DATE%  # текущая дата
echo %TIME%  # текущее время
echo %RANDOM%  # случайное число 0-32767
echo %COMPUTERNAME%  # имя компьютера
echo %USERNAME%  # имя пользователя
19Что такое %~dp0 и другие модификаторы?
@echo off
echo %~dp0  # диск + путь к скрипту
echo %~f0  # полный путь
echo %~n0  # имя файла без расширения
echo %~x0  # расширение
echo %~dpnx0  # полный путь + имя + расширение
20Что такое SET /A?
SET /a result=5+3
echo %result%
SET /a count+=1
SET /a "area=(10+5)*2"
SET /a bin=0b1010  # двоичная
SET /a hex=0xFF  # шестнадцатеричная
21Что такое find и findstr?
find "error" log.txt
find /n "error" log.txt  # с номерами строк
find /c "error" log.txt  # количество
findstr "error warning" *.log
findstr /i "error" log.txt  # без учета регистра
findstr /r "^[0-9].*error" log.txt  # регулярка
22Что такое sort?
sort data.txt
sort /r data.txt  # обратный порядок
type data.txt | sort  # через пайп
sort /+3 data.txt  # по 3-му символу
sort /unique data.txt  # уникальные
23Что такое fc?
fc file1.txt file2.txt
fc /b file1.bin file2.bin  # побайтово
fc /c file1.txt file2.txt  # без учета регистра
fc /n file1.txt file2.txt  # с номерами строк
24Что такое attrib?
attrib +r file.txt  # только чтение
attrib -r file.txt  # снять readonly
attrib +h secret.txt  # скрытый
attrib +s +h system.dat  # системный + скрытый
attrib /s -h *.*  # рекурсивно
25Что такое xcopy?
xcopy /E /I source dest  # с подпапками
xcopy /D /Y source dest  # только новые
xcopy /EXCLUDE:excl.txt source dest
xcopy /C /Q /H /E /K source dest  # полная копия с правами
26Что такое robocopy?
robocopy source dest /MIR  # зеркало
robocopy source dest *.txt /S /R:3 /W:5
robocopy source dest /MOV  # переместить
robocopy source dest /MON:1  # мониторинг
robocopy source dest /LOG:log.txt  # лог
27Что такое forfiles?
forfiles /P C:\Logs /M *.log /D -7 /C "cmd /c del @file"
forfiles /P C:\Backup /S /M *.bak /D +0 /C "cmd /c echo @fname"
forfiles /P C:\ /M *.tmp /C "cmd /c if @fsize gtr 100000 del @file" 
28Что такое comp?
comp file1.txt file2.txt
comp /a file1.txt file2.txt  # ASCII
comp /l file1.txt file2.txt  # номера строк
comp /n=100 file1.txt file2.txt  # первые 100 строк
29Что такое команда mkdir с подпапками?
mkdir project\src\components
mkdir "project\docs\api"
mkdir a\b\c\d\e  # все вложенные
# Если папки уже есть — просто тишина
30Что такое команда tree?
tree
tree /F  # с файлами
tree /A  # ASCII символы
tree /F | clip  # скопировать в буфер
31Что такое ipconfig?
ipconfig
ipconfig /all  # подробно
ipconfig /flushdns  # сбросить DNS
ipconfig /release && ipconfig /renew
ipconfig /displaydns  # кэш DNS
32Что такое ping?
ping google.com
ping -n 10 google.com  # 10 пакетов
ping -t google.com  # бесконечно
ping -l 1500 google.com  # размер пакета
ping -4 google.com  # только IPv4
33Что такое tracert?
tracert google.com
tracert -d google.com  # без DNS
pathping google.com  # трассировка с анализом потерь
pathping -n google.com  # без DNS
34Что такое nslookup?
nslookup google.com
nslookup -type=mx gmail.com  # MX записи
nslookup -type=ns google.com  # NS записи
nslookup 8.8.8.8  # обратный запрос
nslookup -type=txt google.com
35Что такое netstat?
netstat -a  # все соединения
netstat -an  # без DNS
netstat -b  # приложения (админ)
netstat -o  # PID
netstat -ano | find ":80"
netstat -r  # таблица маршрутизации
36Что такое route?
route print
route add 10.0.0.0 mask 255.0.0.0 192.168.1.1
route delete 10.0.0.0
route change 10.0.0.0 mask 255.0.0.0 192.168.1.2
route -p add 10.0.0.0 mask 255.0.0.0 192.168.1.1  # постоянно
37Что такое net use?
net use Z: \\server\share
net use Z: /delete
net use * \\server\share  # следующая буква
net use \\server\share /user:DOMAIN\user pass
net use  # список подключений
38Что такое net share?
net share
net share MyShare=C:\Shared
net share MyShare /delete
net share MyShare /grant:everyone,READ
net share MyShare /cache:no  # без офлайн
39Что такое telnet/ssh?
telnet 192.168.1.1 80  # проверить порт
telnet  # если включено
# SSH через OpenSSH на Windows:
ssh user@192.168.1.1
ssh -p 2222 user@host
ssh -i key.pem user@host
40Что такое curl в Windows?
curl https://api.example.com
curl -o file.json https://api.example.com/data
curl -H "Authorization: Bearer token" https://api.example.com
curl -X POST -d "name=test" https://api.example.com
curl -k https://self-signed.example.com  # без SSL проверки
41Что такое chkdsk?
chkdsk C:
chkdsk C: /F  # исправить ошибки
chkdsk C: /R  # найти поврежденные сектора
chkdsk D: /V  # выводить имена файлов
chkdsk /?  # справка
42Что такое diskpart?
diskpart
# Внутри diskpart:
list disk
select disk 0
list partition
create partition primary size=10000
format fs=ntfs quick
assign letter=D
exit
43Что такое format?
format D: /FS:NTFS /Q  # быстрое
format D: /FS:FAT32 /Q
format D: /FS:exFAT /Q
format D: /V:MyDrive  # метка тома
format D: /P:2  # безопасное удаление
44Что такое vol и label?
vol C:  # показать метку
label C:  # показать/изменить
label D: MyData  # установить метку
label  # текущий диск
45Что такое fsutil?
fsutil fsinfo drives  # список дисков
fsutil fsinfo volumeinfo C:
fsutil fsinfo ntfsinfo C:
fsutil dirty query C:
fsutil quota query C:
fsutil file createnew test.txt 1024  # файл 1KB
46Что такое wmic?
wmic os get caption,version  # версия ОС
wmic cpu get name,numberofcores
wmic diskdrive get size,model
wmic logicaldisk get size,freespace,caption
wmic process where name="notepad.exe" delete
wmic service where name="Spooler" call stopservice
47Что такое systeminfo?
systeminfo
systeminfo | find "Total Physical Memory"
systeminfo | find "OS Name"
systeminfo /S remotePC  # удаленный ПК
48Что такое driverquery?
driverquery
driverquery /v  # подробно
driverquery /fo csv  # как CSV
driverquery /si  # подписанные
driverquery /nh  # без заголовка
49Что такое tasklist/taskkill?
tasklist
tasklist /v  # подробно
tasklist /fi "status eq running"
taskkill /im notepad.exe
taskkill /pid 1234 /f  # принудительно
taskkill /fi "memusage gt 50000"  # по памяти
50Что такое shutdown?
shutdown /s /t 60  # выключить через 60с
shutdown /r /t 0  # перезагрузить сейчас
shutdown /l  # выйти из системы
shutdown /a  # отменить
shutdown /h  # гибернация
shutdown /s /f /t 0  # принудительно
51Что такое CALL в .bat?
@echo off
CALL :sub main.log
EXIT /B 0

:sub
set LOG=%1
echo %DATE% %TIME% >> %LOG%
echo Выполнено >> %LOG%
EXIT /B 0

52Что такое GOTO в .bat?
@echo off
IF NOT EXIST "config.ini" GOTO error
echo Запуск...
GOTO end

:error
echo Файл конфигурации не найден!
EXIT /B 1

:end
echo Успешно

53Что такое EXIT /B?
@echo off
IF "%1"=="" (
    echo Укажите аргумент
    EXIT /B 1
)
IF NOT EXIST "%1" (
    echo Файл не найден
    EXIT /B 2
)
echo Файл найден
EXIT /B 0
54Что такое CHOICE?
@echo off
echo [1] Запустить сервер
echo [2] Настройки
echo [3] Выход
CHOICE /C 123 /N /M "Выберите: "
IF errorlevel 3 GOTO exit
IF errorlevel 2 GOTO settings
IF errorlevel 1 GOTO start

:start
echo Запуск...
GOTO end

:settings
echo Настройки...
GOTO end

:end
echo Готово

55Что такое PAUSE?
@echo off
echo Нажмите Enter для продолжения...
pause > nul
echo Продолжаем...

PAUSE > nul — скрыть сообщение

pause — показать "Press any key..."

56Что такое TITLE?
@echo off
TITLE Мой установщик версии 1.0
echo Установка...
TIMEOUT /T 3 /NOBREAK >nul
TITLE Готово — Мой установщик
57Что такое COLOR?
@echo off
COLOR 0A  # черный фон, зеленый текст
# 0=черный 1=синий 2=зеленый 3=голубой
# 4=красный 5=фиолетовый 6=желтый 7=белый
# 8=серый 9=светло-синий A=светло-зеленый
COLOR 4F  # красный фон, ярко-белый текст
COLOR  # сбросить
58Что такое DATE/TIME?
@echo off
echo %DATE% %TIME%
TIMEOUT /T 5 >nul
echo %DATE:~0,2%  # день
echo %DATE:~3,2%  # месяц
echo %DATE:~6,4%  # год
echo %TIME:~0,2%  # часы
echo %TIME:~3,2%  # минуты
59Что такое AT/SCHTASKS?
schtasks /create /tn "MyTask" /tr "C:\script.bat" /sc daily /st 09:00
schtasks /create /tn "Backup" /tr "backup.bat" /sc weekly /d MON /st 02:00
schtasks /run /tn "MyTask"
schtasks /query /fo LIST /v
schtasks /delete /tn "MyTask" /f
# AT — устарела, вместо нее schtasks
60Что такое START?
start notepad.exe
start "" "C:\Program Files\app.exe"
start /min cmd /c script.bat  # свернуто
start /max notepad.exe  # развернуто
start /wait setup.exe  # ждать завершения
start /B cmd /c long_task.bat  # в том же окне
61Что такое REG QUERY?
REG QUERY "HKLM\Software\Microsoft\Windows\CurrentVersion"
REG QUERY "HKCU\Control Panel\Desktop" /v Wallpaper
REG QUERY "HKLM\Software" /s /c /f "Microsoft"
REG QUERY HKCU /v Path /ve  # значение по умолчанию
62Что такое REG ADD?
REG ADD "HKCU\Software\MyApp" /v Setting /t REG_SZ /d "value1" /f
REG ADD "HKLM\System\CurrentControlSet\Services\MyService" /v Start /t REG_DWORD /d 2 /f
REG ADD "HKCU\Software\MyApp" /ve /d "DefaultValue" /f
63Что такое REG DELETE?
REG DELETE "HKCU\Software\MyApp" /v Setting /f
REG DELETE "HKCU\Software\MyApp" /f  # удалить весь ключ
REG DELETE "HKLM\Software\MyApp" /va /f  # все значения
REG DELETE "HKCU\Software" /f  # удаление ветки (осторожно!)
64Что такое REG COPY?
REG COPY "HKCU\Software\MyApp" "HKCU\Software\MyAppBackup" /s /f
REG COPY "HKLM\Software\MyApp" "HKCU\Software\MyApp" /s /f
REG COPY HKLM HKCU\Temp /s  # копирование ветки
65Что такое REG EXPORT?
REG EXPORT "HKCU\Software\MyApp" backup.reg
REG EXPORT "HKLM\SYSTEM\CurrentControlSet\Services" services.reg
# Можно открыть .reg файл в блокноте для редактирования
66Что такое REG IMPORT?
REG IMPORT backup.reg
# Или двойным кликом по .reg файлу
# Или:
regedit /s settings.reg  # тихий импорт
# ВНИМАНИЕ: импорт изменяет реестр!
67Что такое REG LOAD?
REG LOAD "HKLM\TempHive" "C:\Users\User\NTUSER.DAT"
# Загружает файл куста для редактирования
# После работы:
REG UNLOAD "HKLM\TempHive" 
68Что такое REG UNLOAD?
REG UNLOAD "HKLM\TempHive"
# Перед выгрузкой убедиться, что ключ не используется
# Выгружает ранее загруженный куст
69Что такое REG COMPARE?
REG COMPARE "HKCU\Software\MyApp" "HKCU\Software\MyAppBackup"
REG COMPARE HKCU HKCU\Temp /s  # рекурсивно
REG COMPARE "HKLM\Software" "HKCU\Software" /ve  # только default
70Что такое REG SAVE?
REG SAVE "HKLM\Software\MyApp" myapp.hiv
REG SAVE "HKCU\Software\MyApp" myapp.hiv /y
# Сохраняет в бинарном формате .hiv
# Для восстановления: REG RESTORE
71Что такое tasklist с фильтрами?
tasklist /fi "status eq running"
tasklist /fi "username eq %USERNAME%"
tasklist /fi "memusage gt 100000" /v
tasklist /fi "pid gt 1000" /fo csv
tasklist /s remotePC /u admin /p pass
72Что такое taskkill с фильтрами?
taskkill /f /im chrome.exe
REM убить все chrome
taskkill /pid 1234 /t  # дерево процессов
taskkill /fi "windowtitle eq Notepad*" /f
taskkill /fi "memusage gt 500000" /f
73Что такое START с affinity и priority?
START /affinity 1 notepad.exe  # 1-е ядро
START /affinity 3 notepad.exe  # 1+2 ядра (бинарно 11)
START /high notepad.exe
START /realtime cmd.exe  # осторожно!
START /low backup.bat  # низкий приоритет
START /belownormal task.bat
74Что такое WMIC process?
wmic process get name,processid,workingsetsize
wmic process where name="notepad.exe" delete
wmic process call create "calc.exe"
wmic process where "processid=1234" set priority=128  # выше
wmic process list brief /format:csv
75Что такое PowerShell из CMD?
powershell -Command "Get-Process | Where-Object {$_.WorkingSet -gt 100MB}"
powershell -File script.ps1
powershell -NoProfile -Command "param($a) Write-Host $a" -args "Hello"
powershell -ExecutionPolicy Bypass -File install.ps1
76Что такое runas?
runas /user:Administrator cmd
runas /user:DOMAIN\Admin "mmc compmgmt.msc"
runas /savecred /user:Admin cmd  # сохранить пароль
runas /profile /user:Admin cmd  # загрузить профиль
77Что такое schtasks для запуска задач?
schtasks /create /tn "BackupTask" /tr "C:\backup.bat" /sc daily /st 03:00 /ru SYSTEM
schtasks /create /tn "Cleanup" /tr "cleanup.bat" /sc weekly /d SUN /st 01:00
schtasks /change /tn "BackupTask" /enable
schtasks /end /tn "BackupTask"
schtasks /delete /tn "Cleanup" /f
78Что такое shutdown с параметрами?
shutdown /r /o /t 0  # перезагрузка в доп. параметры
shutdown /r /fw /t 0  # перезагрузка в UEFI
shutdown /s /hybrid /t 0  # быстрый запуск
shutdown /r /f /t 0 /d p:4:1  # с кодом причины
shutdown /sg /t 0  # перезагрузка с автозапуском программ
79Что такое tscon/logoff?
query session  # список сессий
query user  # пользователи
query process  # процессы
tscon 1  # подключиться к сессии 1
tsdiscon  # отключить текущую сессию
logoff 1  # завершить сессию 1
reset session 1  # сбросить сессию
80Что такое powercfg?
powercfg /list  # схемы питания
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
powercfg /change standby-timeout-ac 30  # 30 минут
powercfg /h off  # отключить гибернацию
powercfg /energy  # анализ энергопотребления
powercfg /batteryreport  # отчет о батарее
81Что такое IF EXIST/IF NOT EXIST?
@echo off
IF EXIST "C:\Program Files\MyApp\app.exe" (
    echo Приложение установлено
) ELSE (
    echo Установите приложение
    EXIT /B 1
)
IF NOT EXIST "logs" mkdir logs
82Что такое IF DEFINED?
@echo off
SET "myvar=Hello"
IF DEFINED myvar (
    echo Переменная myvar=%myvar%
)
IF NOT DEFINED myvar (
    echo Переменная не задана
    SET /p myvar="Введите значение: "
)
83Что такое FOR /F?
@echo off
FOR /F "tokens=*" %%i IN ('dir /b *.txt') DO echo %%i
FOR /F "tokens=1,2 delims=," %%a IN (data.csv) DO echo %%a=%%b
FOR /F "usebackq tokens=*" %%i IN ("file with spaces.txt") DO echo %%i
FOR /F "skip=1 tokens=2 delims==" %%i IN ('set ^| find "PATH"') DO echo %%i
84Что такое FOR /R?
@echo off
FOR /R "C:\Projects" %%f IN (*.txt) DO (
    echo %%f
    attrib +r "%%f"
)
REM со счетчиком:
SETLOCAL ENABLEDELAYEDEXPANSION
SET count=0
FOR /R %%f IN (*.log) DO (
    SET /a count+=1
    echo !count!: %%f
)
ENDLOCAL
85Что такое FOR /D?
@echo off
FOR /D %%d IN (*) DO (
    echo Папка: %%d
    dir /b "%%d"
)
REM рекурсивно по папкам:
FOR /D /R %%d IN (*) DO (
    echo %%d имеет подпапки
)
86Что такое SET /P?
@echo off
SET /p name="Введите имя: "
SET /p pass="Пароль: "
IF "%name%"=="" (
    echo Имя не может быть пустым
    EXIT /B 1
)
echo Привет, %name%!
echo %DATE% %TIME% %name% >> log.txt
87Что такое pipes (|) и redirection?
dir | find ".txt"
echo Hello > file.txt  # перезаписать
echo World >> file.txt  # добавить
dir 2> errors.txt  # ошибки
dir > out.txt 2>&1  # вывод + ошибки
dir < input.txt  # ввод из файла
(dir && echo OK) || echo FAIL
88Что такое redirects >, >>, 2>?
@echo off
REM > — перезапись, >> — добавление
ipconfig > network_info.txt
echo --- >> network_info.txt
ipconfig /all >> network_info.txt 2>&1
REM 2> — ошибки, 2>&1 — объединить
REM < — ввод из файла
REM | — пайп (передача вывода)
89Что такое error handling с ||?
@echo off
mkdir newfolder || (
    echo Не удалось создать папку
    EXIT /B 1
)
copy file.txt newfolder\ || (
    echo Ошибка копирования
    EXIT /B 2
)
echo ОК || echo Эта часть не выполнится
dir nonexistent 2>nul || echo Файл не найден
90Что такое delayed expansion на практике?
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET arr[0]=apple
SET arr[1]=banana
SET arr[2]=cherry
FOR /L %%i IN (0,1,2) DO (
    echo !arr[%%i]!
)
REM цикл с изменением переменной:
SET total=0
FOR %%f IN (*.txt) DO (
    CALL :getsize "%%f"
    SET /a total+=!size!
)
echo Общий размер: %total% bytes
EXIT /B 0

:getsize
SET size=%~z1
EXIT /B 0

91Структура .bat файла — best practices.
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
REM === Конфигурация ===
SET "SCRIPT_DIR=%~dp0"
SET "LOG_FILE=%SCRIPT_DIR%app.log"

REM === Проверки ===
IF "%1"=="" (
echo Usage: %~n0 [command]
EXIT /B 1
)

REM === Основная логика ===
CALL :%1 2>nul
IF ERRORLEVEL 1 (
echo Ошибка выполнения команды %1
EXIT /B 1
)

EXIT /B 0

:install
echo Установка... >> "%LOG_FILE%"
EXIT /B 0

:start
echo Запуск... >> "%LOG_FILE%"
EXIT /B 0

92Exit codes — коды возврата.
@echo off
REM 0 = успех
REM 1 = общая ошибка
REM 2 = неверный аргумент
REM 3 = файл не найден
REM 4 = недостаточно прав
REM 5 = ресурс занят

CALL :validate_args %1
IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
CALL :process_file %1
IF %ERRORLEVEL% NEQ 0 (
echo Код ошибки: %ERRORLEVEL%
EXIT /B %ERRORLEVEL%
)
EXIT /B 0

:validate_args
IF "%1"=="" EXIT /B 2
EXIT /B 0

:process_file
IF NOT EXIST "%1" EXIT /B 3
EXIT /B 0

93Логирование в .bat.
@echo off
SETLOCAL
SET "LOG=%~dp0script_%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%.log"
SET "TS=%DATE% %TIME%"

CALL :log "Начало скрипта"
CALL :log "Аргументы: %*"
IF NOT EXIST "%1" (
CALL :error "Файл не найден: %1"
EXIT /B 1
)
CALL :log "Успешно: %1"
EXIT /B 0

:log
echo [%DATE% %TIME%] %* >> "%LOG%"
EXIT /B 0

:error
echo [%DATE% %TIME%] ERROR: %* >> "%LOG%"
echo Ошибка: %*
EXIT /B 0

94Конфигурационные файлы .ini для .bat.
@echo off
SETLOCAL
REM config.ini:
REM DB_HOST=localhost
REM DB_PORT=5432
REM DB_USER=admin

FOR /F "tokens=1,2 delims==" %%a IN (config.ini) DO (
IF "%%a"=="DB_HOST" SET "DB_HOST=%%b"
IF "%%a"=="DB_PORT" SET "DB_PORT=%%b"
IF "%%a"=="DB_USER" SET "DB_USER=%%b"
)
echo Подключение к %DB_HOST%:%DB_PORT% как %DB_USER%

95Меню-система в .bat.
@echo off
SETLOCAL
:MENU
CLS
echo ============================
echo     СИСТЕМА УПРАВЛЕНИЯ
echo ============================
echo [1] Запустить сервер
echo [2] Остановить сервер
echo [3] Статус
echo [4] Логи
echo [5] Выход
echo ============================

CHOICE /C 12345 /N /M "Выберите: "
IF ERRORLEVEL 5 GOTO EXIT
IF ERRORLEVEL 4 GOTO LOGS
IF ERRORLEVEL 3 GOTO STATUS
IF ERRORLEVEL 2 GOTO STOP
IF ERRORLEVEL 1 GOTO START

:START
echo Запуск... > status.txt
echo Сервер запущен
PAUSE
GOTO MENU

:STOP
echo Остановлен > status.txt
echo Сервер остановлен
PAUSE
GOTO MENU

:STATUS
type status.txt 2>nul || echo Статус неизвестен
PAUSE
GOTO MENU

:LOGS
type app.log 2>nul || echo Логов нет
PAUSE
GOTO MENU

:EXIT
echo До свидания!
EXIT /B 0

96Backup скрипт на .bat.
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET "BACKUP_DIR=C:\Backups"
SET "SOURCE_DIR=C:\Important"
SET "DATE_STAMP=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%"
SET "BACKUP_FILE=%BACKUP_DIR%\backup_%DATE_STAMP%.zip"

IF NOT EXIST "%BACKUP_DIR%" mkdir "%BACKUP_DIR%"
IF NOT EXIST "%SOURCE_DIR%" (
echo Source directory not found
EXIT /B 1
)

REM Используем PowerShell для архивации
powershell -NoProfile -Command "Compress-Archive -Path '%SOURCE_DIR%*' -DestinationPath '%BACKUP_FILE%'"

IF EXIST "%BACKUP_FILE%" (
echo Backup created: %BACKUP_FILE%
FOR %%F IN ("%BACKUP_FILE%") DO echo Size: %%~zF bytes
) ELSE (
echo Backup failed!
EXIT /B 1
)
EXIT /B 0

97Deploy скрипт на .bat.
@echo off
SETLOCAL
SET "APP_DIR=C:\Apps\myapp"
SET "DEPLOY_ZIP=%~dp0build\app.zip"
SET "BACKUP_DIR=C:\Backups\app_%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%"

IF NOT EXIST "%DEPLOY_ZIP%" (
echo Build not found: %DEPLOY_ZIP%
EXIT /B 1
)

REM Бекап текущей версии
IF EXIST "%APP_DIR%" (
mkdir "%BACKUP_DIR%"
move "%APP_DIR%*" "%BACKUP_DIR%" 2>nul
)

REM Распаковка новой версии
powershell -NoProfile -Command "Expand-Archive -Path '%DEPLOY_ZIP%' -DestinationPath '%APP_DIR%' -Force"

echo Deploy completed: %DATE% %TIME%
echo Version deployed to: %APP_DIR%
EXIT /B 0

98Scheduled task скрипт с schtasks.
@echo off
SETLOCAL
SET "TASK_NAME=DailyCleanup"
SET "SCRIPT_PATH=%~dp0cleanup.bat"
SET "SCHED_TIME=03:00"

schtasks /query /tn "%TASK_NAME%" >nul 2>&1
IF %ERRORLEVEL% EQU 0 (
echo Task already exists, updating...
schtasks /change /tn "%TASK_NAME%" /tr "%SCRIPT_PATH%" /ru SYSTEM
) ELSE (
echo Creating task...
schtasks /create /tn "%TASK_NAME%" /tr "%SCRIPT_PATH%" /sc daily /st "%SCHED_TIME%" /ru SYSTEM /rl HIGHEST /f
)

schtasks /query /tn "%TASK_NAME%" /fo LIST /v
EXIT /B 0

99File watcher с FORFILES.
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET "WATCH_DIR=C:\WatchFolder"
SET "LOG_FILE=C:\Logs\watcher.log"
SET "DAYS_OLD=-1"

IF NOT EXIST "%WATCH_DIR%" (
echo Directory not found
EXIT /B 1
)

echo Watching: %WATCH_DIR% at %DATE% %TIME% >> "%LOG_FILE%"

FORFILES /P "%WATCH_DIR%" /S /D %DAYS_OLD% /C "cmd /c echo [%DATE% %TIME%] Изменен: @path @fsize bytes >> "%LOG_FILE%""

REM Обработка новых файлов
FORFILES /P "%WATCH_DIR%" /M *.csv /D %DAYS_OLD% /C "cmd /c move @file "C:\Processed@fname_%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%.csv""

echo Check completed. Log: %LOG_FILE%
EXIT /B 0

100Интерактивный скрипт установки.
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
TITLE Установщик MyApp v1.0
COLOR 0A

REM === ПРИВЕТСТВИЕ ===
CLS
echo ====================================
echo Добро пожаловать в установщик
echo ====================================
echo.

REM === ПРОВЕРКА ПРАВ ===
NET SESSION >nul 2>&1
IF %ERRORLEVEL% NEQ 0 (
COLOR 0C
echo Требуются права администратора!
echo Запустите скрипт от имени администратора.
PAUSE
EXIT /B 1
)

REM === ВЫБОР ПУТИ ===
SET "INSTALL_DIR=C:\Program Files\MyApp"
SET /p INSTALL_DIR="Путь установки [%INSTALL_DIR%]: "
IF NOT EXIST "%INSTALL_DIR%" mkdir "%INSTALL_DIR%"

REM === КОПИРОВАНИЕ ===
echo Копирование файлов...
xcopy /E /I /Y "%~dp0files*" "%INSTALL_DIR%"
IF %ERRORLEVEL% NEQ 0 (
echo Ошибка копирования!
PAUSE
EXIT /B 1
)

REM === СОЗДАНИЕ ЯРЛЫКА ===
set "DESKTOP=%USERPROFILE%\Desktop"
echo Создание ярлыка на рабочем столе...
powershell -NoProfile -Command "$s=(New-Object -COM WScript.Shell).CreateShortcut('%DESKTOP%\MyApp.lnk');$s.TargetPath='%INSTALL_DIR%\app.exe';$s.Save()"

REM === ДОБАВЛЕНИЕ В PATH ===
echo Добавление в PATH...
SETX PATH "%PATH%;%INSTALL_DIR%"

REM === ЗАВЕРШЕНИЕ ===
COLOR 0A
echo.
echo ====================================
echo Установка успешно завершена!
echo ====================================
echo Установлено в: %INSTALL_DIR%
echo.
PAUSE
EXIT /B 0


Практические задания

Практическое заданиеКоды
1Откройте CMD и проверьте версию.
cmd.exe
# Или через Win+R → cmd
# Версия:
ver
# Справка:
help
2Перейдите в другую директорию.
cd C:\Windows\System32
cd ..  # на уровень вверх
cd /d D:\Projects  # сменить диск
cd  # показать текущий путь
3Создайте и удалите папки.
dir  # список файлов и папок
dir /w  # широкий формат
dir /s  # с подпапками
md myfolder  # создать папку
rmdir myfolder  # удалить пустую папку
rmdir /s /q myfolder  # удалить с содержимым
4Скопируйте и удалите файл.
copy file1.txt file2.txt
copy *.txt C:\Backup\
del file.txt  # удалить файл
del /f readonly.txt  # принудительно
del /s *.tmp  # рекурсивно
5Переименуйте и переместите файл.
ren old.txt new.txt
ren *.txt *.bak
move file.txt C:\Target\
move folder C:\Target\  # переместить папку
move /y file.txt C:\Target\  # без подтверждения
6Выведите содержимое файла.
type file.txt
type file.txt | more  # постранично
type file1.txt file2.txt > combined.txt  # объединить
7Очистите экран.
cls
# Альтернатива:
echo off
cls
8Выведите текст или переменную.
echo Hello World
echo.  # пустая строка
echo off  # скрыть команды
echo %PATH%  # вывести переменную
9Получите справку по командам.
help  # список всех команд
help dir  # справка по dir
dir /?  # альтернатива
help | find "copy"  # поиск по справке
10Закройте CMD.
exit  # закрыть окно
exit /b 1  # выход из .bat с кодом 1
# В .bat:
EXIT /B 0  # успешное завершение
11Объявите и используйте переменную.
SET name=John
SET age=25
echo %name%
SET PATH=%PATH%;C:\MyApp   # дополнение PATH
SET  # список всех переменных
SET name=  # удалить переменную
12Измените PATH.
echo %PATH%
setx PATH "%PATH%;C:\MyTools"  # постоянно
# В сессии:
SET PATH=%PATH%;C:\MyApp
13Используйте аргументы в .bat.
@echo off
echo Первый аргумент: %1
echo Второй: %2
echo Все аргументы: %*
echo Количество: %~1
echo %~nx1  # только имя файла из пути
14Напишите условный оператор.
IF "%1"=="" (
    echo Аргумент не задан
    EXIT /B 1
)
IF EXIST file.txt (echo Файл существует)
IF %ERRORLEVEL% NEQ 0 (echo Ошибка!)
15Включите отложенное расширение.
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET count=0
FOR %%i IN (1 2 3) DO (
    SET /a count=count+1
    echo !count!  # важно: ! вместо %
)
ENDLOCAL
16Напишите цикл.
@echo off
FOR %%i IN (1 2 3 4 5) DO echo %%i
FOR %%f IN (*.txt) DO echo %%f
FOR /L %%i IN (1,1,10) DO (
    echo Число %%i
)
FOR /D %%d IN (*) DO rmdir /s /q %%d
17Обработайте код возврата.
some_command.exe
echo %ERRORLEVEL%
IF %ERRORLEVEL% NEQ 0 (
    echo Команда завершилась с ошибкой
    EXIT /B %ERRORLEVEL%
)
# или короче:
if errorlevel 1 (echo Ошибка >= 1)
18Системные переменные.
echo %CD%  # текущая директория
echo %DATE%  # текущая дата
echo %TIME%  # текущее время
echo %RANDOM%  # случайное число 0-32767
echo %COMPUTERNAME%  # имя компьютера
echo %USERNAME%  # имя пользователя
19Путь к текущему .bat.
@echo off
echo %~dp0  # диск + путь к скрипту
echo %~f0  # полный путь
echo %~n0  # имя файла без расширения
echo %~x0  # расширение
echo %~dpnx0  # полный путь + имя + расширение
20Арифметика в CMD.
SET /a result=5+3
echo %result%
SET /a count+=1
SET /a "area=(10+5)*2"
SET /a bin=0b1010  # двоичная
SET /a hex=0xFF  # шестнадцатеричная
21Поиск текста в файлах.
find "error" log.txt
find /n "error" log.txt  # с номерами строк
find /c "error" log.txt  # количество
findstr "error warning" *.log
findstr /i "error" log.txt  # без учета регистра
findstr /r "^[0-9].*error" log.txt  # регулярка
22Сортировка данных.
sort data.txt
sort /r data.txt  # обратный порядок
type data.txt | sort  # через пайп
sort /+3 data.txt  # по 3-му символу
sort /unique data.txt  # уникальные
23Сравнение файлов.
fc file1.txt file2.txt
fc /b file1.bin file2.bin  # побайтово
fc /c file1.txt file2.txt  # без учета регистра
fc /n file1.txt file2.txt  # с номерами строк
24Работа с атрибутами файлов.
attrib +r file.txt  # только чтение
attrib -r file.txt  # снять readonly
attrib +h secret.txt  # скрытый
attrib +s +h system.dat  # системный + скрытый
attrib /s -h *.*  # рекурсивно
25Расширенное копирование.
xcopy /E /I source dest  # с подпапками
xcopy /D /Y source dest  # только новые
xcopy /EXCLUDE:excl.txt source dest
xcopy /C /Q /H /E /K source dest  # полная копия с правами
26Мощное копирование.
robocopy source dest /MIR  # зеркало
robocopy source dest *.txt /S /R:3 /W:5
robocopy source dest /MOV  # переместить
robocopy source dest /MON:1  # мониторинг
robocopy source dest /LOG:log.txt  # лог
27Обработка файлов по дате.
forfiles /P C:\Logs /M *.log /D -7 /C "cmd /c del @file"
forfiles /P C:\Backup /S /M *.bak /D +0 /C "cmd /c echo @fname"
forfiles /P C:\ /M *.tmp /C "cmd /c if @fsize gtr 100000 del @file" 
28Побайтовое сравнение.
comp file1.txt file2.txt
comp /a file1.txt file2.txt  # ASCII
comp /l file1.txt file2.txt  # номера строк
comp /n=100 file1.txt file2.txt  # первые 100 строк
29Создайте структуру папок.
mkdir project\src\components
mkdir "project\docs\api"
mkdir a\b\c\d\e  # все вложенные
# Если папки уже есть — просто тишина
30Дерево папок.
tree
tree /F  # с файлами
tree /A  # ASCII символы
tree /F | clip  # скопировать в буфер
31Проверьте сетевые настройки.
ipconfig
ipconfig /all  # подробно
ipconfig /flushdns  # сбросить DNS
ipconfig /release && ipconfig /renew
ipconfig /displaydns  # кэш DNS
32Проверьте доступность хоста.
ping google.com
ping -n 10 google.com  # 10 пакетов
ping -t google.com  # бесконечно
ping -l 1500 google.com  # размер пакета
ping -4 google.com  # только IPv4
33Трассировка маршрута.
tracert google.com
tracert -d google.com  # без DNS
pathping google.com  # трассировка с анализом потерь
pathping -n google.com  # без DNS
34DNS запросы.
nslookup google.com
nslookup -type=mx gmail.com  # MX записи
nslookup -type=ns google.com  # NS записи
nslookup 8.8.8.8  # обратный запрос
nslookup -type=txt google.com
35Проверьте порты и соединения.
netstat -a  # все соединения
netstat -an  # без DNS
netstat -b  # приложения (админ)
netstat -o  # PID
netstat -ano | find ":80"
netstat -r  # таблица маршрутизации
36Работа с маршрутами.
route print
route add 10.0.0.0 mask 255.0.0.0 192.168.1.1
route delete 10.0.0.0
route change 10.0.0.0 mask 255.0.0.0 192.168.1.2
route -p add 10.0.0.0 mask 255.0.0.0 192.168.1.1  # постоянно
37Подключение сетевых дисков.
net use Z: \\server\share
net use Z: /delete
net use * \\server\share  # следующая буква
net use \\server\share /user:DOMAIN\user pass
net use  # список подключений
38Общие папки.
net share
net share MyShare=C:\Shared
net share MyShare /delete
net share MyShare /grant:everyone,READ
net share MyShare /cache:no  # без офлайн
39Подключение к удаленному хосту.
telnet 192.168.1.1 80  # проверить порт
telnet  # если включено
# SSH через OpenSSH на Windows:
ssh user@192.168.1.1
ssh -p 2222 user@host
ssh -i key.pem user@host
40HTTP запросы из CMD.
curl https://api.example.com
curl -o file.json https://api.example.com/data
curl -H "Authorization: Bearer token" https://api.example.com
curl -X POST -d "name=test" https://api.example.com
curl -k https://self-signed.example.com  # без SSL проверки
41Проверка диска.
chkdsk C:
chkdsk C: /F  # исправить ошибки
chkdsk C: /R  # найти поврежденные сектора
chkdsk D: /V  # выводить имена файлов
chkdsk /?  # справка
42Управление дисками.
diskpart
# Внутри diskpart:
list disk
select disk 0
list partition
create partition primary size=10000
format fs=ntfs quick
assign letter=D
exit
43Форматирование диска.
format D: /FS:NTFS /Q  # быстрое
format D: /FS:FAT32 /Q
format D: /FS:exFAT /Q
format D: /V:MyDrive  # метка тома
format D: /P:2  # безопасное удаление
44Метка тома.
vol C:  # показать метку
label C:  # показать/изменить
label D: MyData  # установить метку
label  # текущий диск
45Файловая система.
fsutil fsinfo drives  # список дисков
fsutil fsinfo volumeinfo C:
fsutil fsinfo ntfsinfo C:
fsutil dirty query C:
fsutil quota query C:
fsutil file createnew test.txt 1024  # файл 1KB
46WMI запросы.
wmic os get caption,version  # версия ОС
wmic cpu get name,numberofcores
wmic diskdrive get size,model
wmic logicaldisk get size,freespace,caption
wmic process where name="notepad.exe" delete
wmic service where name="Spooler" call stopservice
47Информация о системе.
systeminfo
systeminfo | find "Total Physical Memory"
systeminfo | find "OS Name"
systeminfo /S remotePC  # удаленный ПК
48Драйверы устройств.
driverquery
driverquery /v  # подробно
driverquery /fo csv  # как CSV
driverquery /si  # подписанные
driverquery /nh  # без заголовка
49Управление процессами.
tasklist
tasklist /v  # подробно
tasklist /fi "status eq running"
taskkill /im notepad.exe
taskkill /pid 1234 /f  # принудительно
taskkill /fi "memusage gt 50000"  # по памяти
50Перезагрузка и выключение.
shutdown /s /t 60  # выключить через 60с
shutdown /r /t 0  # перезагрузить сейчас
shutdown /l  # выйти из системы
shutdown /a  # отменить
shutdown /h  # гибернация
shutdown /s /f /t 0  # принудительно
51Вызов подпрограмм.
@echo off
CALL :sub main.log
EXIT /B 0

:sub
set LOG=%1
echo %DATE% %TIME% >> %LOG%
echo Выполнено >> %LOG%
EXIT /B 0

52Переход по метке.
@echo off
IF NOT EXIST "config.ini" GOTO error
echo Запуск...
GOTO end

:error
echo Файл конфигурации не найден!
EXIT /B 1

:end
echo Успешно

53Выход с кодом возврата.
@echo off
IF "%1"=="" (
    echo Укажите аргумент
    EXIT /B 1
)
IF NOT EXIST "%1" (
    echo Файл не найден
    EXIT /B 2
)
echo Файл найден
EXIT /B 0
54Интерактивный выбор.
@echo off
echo [1] Запустить сервер
echo [2] Настройки
echo [3] Выход
CHOICE /C 123 /N /M "Выберите: "
IF errorlevel 3 GOTO exit
IF errorlevel 2 GOTO settings
IF errorlevel 1 GOTO start

:start
echo Запуск...
GOTO end

:settings
echo Настройки...
GOTO end

:end
echo Готово

55Пауза в скрипте.
@echo off
echo Нажмите Enter для продолжения...
pause > nul
echo Продолжаем...

PAUSE > nul — скрыть сообщение

pause — показать "Press any key..."

56Заголовок окна.
@echo off
TITLE Мой установщик версии 1.0
echo Установка...
TIMEOUT /T 3 /NOBREAK >nul
TITLE Готово — Мой установщик
57Цвета в консоли.
@echo off
COLOR 0A  # черный фон, зеленый текст
# 0=черный 1=синий 2=зеленый 3=голубой
# 4=красный 5=фиолетовый 6=желтый 7=белый
# 8=серый 9=светло-синий A=светло-зеленый
COLOR 4F  # красный фон, ярко-белый текст
COLOR  # сбросить
58Дата и время в скриптах.
@echo off
echo %DATE% %TIME%
TIMEOUT /T 5 >nul
echo %DATE:~0,2%  # день
echo %DATE:~3,2%  # месяц
echo %DATE:~6,4%  # год
echo %TIME:~0,2%  # часы
echo %TIME:~3,2%  # минуты
59Планировщик задач.
schtasks /create /tn "MyTask" /tr "C:\script.bat" /sc daily /st 09:00
schtasks /create /tn "Backup" /tr "backup.bat" /sc weekly /d MON /st 02:00
schtasks /run /tn "MyTask"
schtasks /query /fo LIST /v
schtasks /delete /tn "MyTask" /f
# AT — устарела, вместо нее schtasks
60Запуск программ.
start notepad.exe
start "" "C:\Program Files\app.exe"
start /min cmd /c script.bat  # свернуто
start /max notepad.exe  # развернуто
start /wait setup.exe  # ждать завершения
start /B cmd /c long_task.bat  # в том же окне
61Запрос к реестру.
REG QUERY "HKLM\Software\Microsoft\Windows\CurrentVersion"
REG QUERY "HKCU\Control Panel\Desktop" /v Wallpaper
REG QUERY "HKLM\Software" /s /c /f "Microsoft"
REG QUERY HKCU /v Path /ve  # значение по умолчанию
62Добавление в реестр.
REG ADD "HKCU\Software\MyApp" /v Setting /t REG_SZ /d "value1" /f
REG ADD "HKLM\System\CurrentControlSet\Services\MyService" /v Start /t REG_DWORD /d 2 /f
REG ADD "HKCU\Software\MyApp" /ve /d "DefaultValue" /f
63Удаление из реестра.
REG DELETE "HKCU\Software\MyApp" /v Setting /f
REG DELETE "HKCU\Software\MyApp" /f  # удалить весь ключ
REG DELETE "HKLM\Software\MyApp" /va /f  # все значения
REG DELETE "HKCU\Software" /f  # удаление ветки (осторожно!)
64Копирование ключей реестра.
REG COPY "HKCU\Software\MyApp" "HKCU\Software\MyAppBackup" /s /f
REG COPY "HKLM\Software\MyApp" "HKCU\Software\MyApp" /s /f
REG COPY HKLM HKCU\Temp /s  # копирование ветки
65Экспорт реестра.
REG EXPORT "HKCU\Software\MyApp" backup.reg
REG EXPORT "HKLM\SYSTEM\CurrentControlSet\Services" services.reg
# Можно открыть .reg файл в блокноте для редактирования
66Импорт реестра.
REG IMPORT backup.reg
# Или двойным кликом по .reg файлу
# Или:
regedit /s settings.reg  # тихий импорт
# ВНИМАНИЕ: импорт изменяет реестр!
67Загрузка куста реестра.
REG LOAD "HKLM\TempHive" "C:\Users\User\NTUSER.DAT"
# Загружает файл куста для редактирования
# После работы:
REG UNLOAD "HKLM\TempHive" 
68Выгрузка куста реестра.
REG UNLOAD "HKLM\TempHive"
# Перед выгрузкой убедиться, что ключ не используется
# Выгружает ранее загруженный куст
69Сравнение веток реестра.
REG COMPARE "HKCU\Software\MyApp" "HKCU\Software\MyAppBackup"
REG COMPARE HKCU HKCU\Temp /s  # рекурсивно
REG COMPARE "HKLM\Software" "HKCU\Software" /ve  # только default
70Сохранение куста в файл.
REG SAVE "HKLM\Software\MyApp" myapp.hiv
REG SAVE "HKCU\Software\MyApp" myapp.hiv /y
# Сохраняет в бинарном формате .hiv
# Для восстановления: REG RESTORE
71Фильтрация процессов.
tasklist /fi "status eq running"
tasklist /fi "username eq %USERNAME%"
tasklist /fi "memusage gt 100000" /v
tasklist /fi "pid gt 1000" /fo csv
tasklist /s remotePC /u admin /p pass
72Убить процессы по фильтру.
taskkill /f /im chrome.exe
REM убить все chrome
taskkill /pid 1234 /t  # дерево процессов
taskkill /fi "windowtitle eq Notepad*" /f
taskkill /fi "memusage gt 500000" /f
73Запуск с приоритетом.
START /affinity 1 notepad.exe  # 1-е ядро
START /affinity 3 notepad.exe  # 1+2 ядра (бинарно 11)
START /high notepad.exe
START /realtime cmd.exe  # осторожно!
START /low backup.bat  # низкий приоритет
START /belownormal task.bat
74Управление процессами через WMI.
wmic process get name,processid,workingsetsize
wmic process where name="notepad.exe" delete
wmic process call create "calc.exe"
wmic process where "processid=1234" set priority=128  # выше
wmic process list brief /format:csv
75Вызов PowerShell.
powershell -Command "Get-Process | Where-Object {$_.WorkingSet -gt 100MB}"
powershell -File script.ps1
powershell -NoProfile -Command "param($a) Write-Host $a" -args "Hello"
powershell -ExecutionPolicy Bypass -File install.ps1
76Запуск от другого пользователя.
runas /user:Administrator cmd
runas /user:DOMAIN\Admin "mmc compmgmt.msc"
runas /savecred /user:Admin cmd  # сохранить пароль
runas /profile /user:Admin cmd  # загрузить профиль
77Создание запланированных задач.
schtasks /create /tn "BackupTask" /tr "C:\backup.bat" /sc daily /st 03:00 /ru SYSTEM
schtasks /create /tn "Cleanup" /tr "cleanup.bat" /sc weekly /d SUN /st 01:00
schtasks /change /tn "BackupTask" /enable
schtasks /end /tn "BackupTask"
schtasks /delete /tn "Cleanup" /f
78Различные режимы выключения.
shutdown /r /o /t 0  # перезагрузка в доп. параметры
shutdown /r /fw /t 0  # перезагрузка в UEFI
shutdown /s /hybrid /t 0  # быстрый запуск
shutdown /r /f /t 0 /d p:4:1  # с кодом причины
shutdown /sg /t 0  # перезагрузка с автозапуском программ
79Управление сессиями RDP.
query session  # список сессий
query user  # пользователи
query process  # процессы
tscon 1  # подключиться к сессии 1
tsdiscon  # отключить текущую сессию
logoff 1  # завершить сессию 1
reset session 1  # сбросить сессию
80Управление питанием.
powercfg /list  # схемы питания
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
powercfg /change standby-timeout-ac 30  # 30 минут
powercfg /h off  # отключить гибернацию
powercfg /energy  # анализ энергопотребления
powercfg /batteryreport  # отчет о батарее
81Проверка существования.
@echo off
IF EXIST "C:\Program Files\MyApp\app.exe" (
    echo Приложение установлено
) ELSE (
    echo Установите приложение
    EXIT /B 1
)
IF NOT EXIST "logs" mkdir logs
82Проверка переменной.
@echo off
SET "myvar=Hello"
IF DEFINED myvar (
    echo Переменная myvar=%myvar%
)
IF NOT DEFINED myvar (
    echo Переменная не задана
    SET /p myvar="Введите значение: "
)
83Обработка вывода команд.
@echo off
FOR /F "tokens=*" %%i IN ('dir /b *.txt') DO echo %%i
FOR /F "tokens=1,2 delims=," %%a IN (data.csv) DO echo %%a=%%b
FOR /F "usebackq tokens=*" %%i IN ("file with spaces.txt") DO echo %%i
FOR /F "skip=1 tokens=2 delims==" %%i IN ('set ^| find "PATH"') DO echo %%i
84Рекурсивный обход.
@echo off
FOR /R "C:\Projects" %%f IN (*.txt) DO (
    echo %%f
    attrib +r "%%f"
)
REM со счетчиком:
SETLOCAL ENABLEDELAYEDEXPANSION
SET count=0
FOR /R %%f IN (*.log) DO (
    SET /a count+=1
    echo !count!: %%f
)
ENDLOCAL
85Обход папок.
@echo off
FOR /D %%d IN (*) DO (
    echo Папка: %%d
    dir /b "%%d"
)
REM рекурсивно по папкам:
FOR /D /R %%d IN (*) DO (
    echo %%d имеет подпапки
)
86Ввод с клавиатуры.
@echo off
SET /p name="Введите имя: "
SET /p pass="Пароль: "
IF "%name%"=="" (
    echo Имя не может быть пустым
    EXIT /B 1
)
echo Привет, %name%!
echo %DATE% %TIME% %name% >> log.txt
87Перенаправление ввода/вывода.
dir | find ".txt"
echo Hello > file.txt  # перезаписать
echo World >> file.txt  # добавить
dir 2> errors.txt  # ошибки
dir > out.txt 2>&1  # вывод + ошибки
dir < input.txt  # ввод из файла
(dir && echo OK) || echo FAIL
88Типы перенаправления.
@echo off
REM > — перезапись, >> — добавление
ipconfig > network_info.txt
echo --- >> network_info.txt
ipconfig /all >> network_info.txt 2>&1
REM 2> — ошибки, 2>&1 — объединить
REM < — ввод из файла
REM | — пайп (передача вывода)
89Обработка ошибок.
@echo off
mkdir newfolder || (
    echo Не удалось создать папку
    EXIT /B 1
)
copy file.txt newfolder\ || (
    echo Ошибка копирования
    EXIT /B 2
)
echo ОК || echo Эта часть не выполнится
dir nonexistent 2>nul || echo Файл не найден
90Отложенное расширение.
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET arr[0]=apple
SET arr[1]=banana
SET arr[2]=cherry
FOR /L %%i IN (0,1,2) DO (
    echo !arr[%%i]!
)
REM цикл с изменением переменной:
SET total=0
FOR %%f IN (*.txt) DO (
    CALL :getsize "%%f"
    SET /a total+=!size!
)
echo Общий размер: %total% bytes
EXIT /B 0

:getsize
SET size=%~z1
EXIT /B 0

91Напишите правильный .bat.
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
REM === Конфигурация ===
SET "SCRIPT_DIR=%~dp0"
SET "LOG_FILE=%SCRIPT_DIR%app.log"

REM === Проверки ===
IF "%1"=="" (
echo Usage: %~n0 [command]
EXIT /B 1
)

REM === Основная логика ===
CALL :%1 2>nul
IF ERRORLEVEL 1 (
echo Ошибка выполнения команды %1
EXIT /B 1
)

EXIT /B 0

:install
echo Установка... >> "%LOG_FILE%"
EXIT /B 0

:start
echo Запуск... >> "%LOG_FILE%"
EXIT /B 0

92Стандартные коды возврата.
@echo off
REM 0 = успех
REM 1 = общая ошибка
REM 2 = неверный аргумент
REM 3 = файл не найден
REM 4 = недостаточно прав
REM 5 = ресурс занят

CALL :validate_args %1
IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
CALL :process_file %1
IF %ERRORLEVEL% NEQ 0 (
echo Код ошибки: %ERRORLEVEL%
EXIT /B %ERRORLEVEL%
)
EXIT /B 0

:validate_args
IF "%1"=="" EXIT /B 2
EXIT /B 0

:process_file
IF NOT EXIST "%1" EXIT /B 3
EXIT /B 0

93Добавьте логирование.
@echo off
SETLOCAL
SET "LOG=%~dp0script_%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%.log"
SET "TS=%DATE% %TIME%"

CALL :log "Начало скрипта"
CALL :log "Аргументы: %*"
IF NOT EXIST "%1" (
CALL :error "Файл не найден: %1"
EXIT /B 1
)
CALL :log "Успешно: %1"
EXIT /B 0

:log
echo [%DATE% %TIME%] %* >> "%LOG%"
EXIT /B 0

:error
echo [%DATE% %TIME%] ERROR: %* >> "%LOG%"
echo Ошибка: %*
EXIT /B 0

94Чтение конфигурации.
@echo off
SETLOCAL
REM config.ini:
REM DB_HOST=localhost
REM DB_PORT=5432
REM DB_USER=admin

FOR /F "tokens=1,2 delims==" %%a IN (config.ini) DO (
IF "%%a"=="DB_HOST" SET "DB_HOST=%%b"
IF "%%a"=="DB_PORT" SET "DB_PORT=%%b"
IF "%%a"=="DB_USER" SET "DB_USER=%%b"
)
echo Подключение к %DB_HOST%:%DB_PORT% как %DB_USER%

95Интерактивное меню.
@echo off
SETLOCAL
:MENU
CLS
echo ============================
echo     СИСТЕМА УПРАВЛЕНИЯ
echo ============================
echo [1] Запустить сервер
echo [2] Остановить сервер
echo [3] Статус
echo [4] Логи
echo [5] Выход
echo ============================

CHOICE /C 12345 /N /M "Выберите: "
IF ERRORLEVEL 5 GOTO EXIT
IF ERRORLEVEL 4 GOTO LOGS
IF ERRORLEVEL 3 GOTO STATUS
IF ERRORLEVEL 2 GOTO STOP
IF ERRORLEVEL 1 GOTO START

:START
echo Запуск... > status.txt
echo Сервер запущен
PAUSE
GOTO MENU

:STOP
echo Остановлен > status.txt
echo Сервер остановлен
PAUSE
GOTO MENU

:STATUS
type status.txt 2>nul || echo Статус неизвестен
PAUSE
GOTO MENU

:LOGS
type app.log 2>nul || echo Логов нет
PAUSE
GOTO MENU

:EXIT
echo До свидания!
EXIT /B 0

96Автоматизация бэкапа.
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET "BACKUP_DIR=C:\Backups"
SET "SOURCE_DIR=C:\Important"
SET "DATE_STAMP=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%"
SET "BACKUP_FILE=%BACKUP_DIR%\backup_%DATE_STAMP%.zip"

IF NOT EXIST "%BACKUP_DIR%" mkdir "%BACKUP_DIR%"
IF NOT EXIST "%SOURCE_DIR%" (
echo Source directory not found
EXIT /B 1
)

REM Используем PowerShell для архивации
powershell -NoProfile -Command "Compress-Archive -Path '%SOURCE_DIR%*' -DestinationPath '%BACKUP_FILE%'"

IF EXIST "%BACKUP_FILE%" (
echo Backup created: %BACKUP_FILE%
FOR %%F IN ("%BACKUP_FILE%") DO echo Size: %%~zF bytes
) ELSE (
echo Backup failed!
EXIT /B 1
)
EXIT /B 0

97Деплой приложения.
@echo off
SETLOCAL
SET "APP_DIR=C:\Apps\myapp"
SET "DEPLOY_ZIP=%~dp0build\app.zip"
SET "BACKUP_DIR=C:\Backups\app_%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%"

IF NOT EXIST "%DEPLOY_ZIP%" (
echo Build not found: %DEPLOY_ZIP%
EXIT /B 1
)

REM Бекап текущей версии
IF EXIST "%APP_DIR%" (
mkdir "%BACKUP_DIR%"
move "%APP_DIR%*" "%BACKUP_DIR%" 2>nul
)

REM Распаковка новой версии
powershell -NoProfile -Command "Expand-Archive -Path '%DEPLOY_ZIP%' -DestinationPath '%APP_DIR%' -Force"

echo Deploy completed: %DATE% %TIME%
echo Version deployed to: %APP_DIR%
EXIT /B 0

98Авторегистрация задачи.
@echo off
SETLOCAL
SET "TASK_NAME=DailyCleanup"
SET "SCRIPT_PATH=%~dp0cleanup.bat"
SET "SCHED_TIME=03:00"

schtasks /query /tn "%TASK_NAME%" >nul 2>&1
IF %ERRORLEVEL% EQU 0 (
echo Task already exists, updating...
schtasks /change /tn "%TASK_NAME%" /tr "%SCRIPT_PATH%" /ru SYSTEM
) ELSE (
echo Creating task...
schtasks /create /tn "%TASK_NAME%" /tr "%SCRIPT_PATH%" /sc daily /st "%SCHED_TIME%" /ru SYSTEM /rl HIGHEST /f
)

schtasks /query /tn "%TASK_NAME%" /fo LIST /v
EXIT /B 0

99Мониторинг изменений.
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET "WATCH_DIR=C:\WatchFolder"
SET "LOG_FILE=C:\Logs\watcher.log"
SET "DAYS_OLD=-1"

IF NOT EXIST "%WATCH_DIR%" (
echo Directory not found
EXIT /B 1
)

echo Watching: %WATCH_DIR% at %DATE% %TIME% >> "%LOG_FILE%"

FORFILES /P "%WATCH_DIR%" /S /D %DAYS_OLD% /C "cmd /c echo [%DATE% %TIME%] Изменен: @path @fsize bytes >> "%LOG_FILE%""

REM Обработка новых файлов
FORFILES /P "%WATCH_DIR%" /M *.csv /D %DAYS_OLD% /C "cmd /c move @file "C:\Processed@fname_%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%.csv""

echo Check completed. Log: %LOG_FILE%
EXIT /B 0

100Полноценный установщик.
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
TITLE Установщик MyApp v1.0
COLOR 0A

REM === ПРИВЕТСТВИЕ ===
CLS
echo ====================================
echo Добро пожаловать в установщик
echo ====================================
echo.

REM === ПРОВЕРКА ПРАВ ===
NET SESSION >nul 2>&1
IF %ERRORLEVEL% NEQ 0 (
COLOR 0C
echo Требуются права администратора!
echo Запустите скрипт от имени администратора.
PAUSE
EXIT /B 1
)

REM === ВЫБОР ПУТИ ===
SET "INSTALL_DIR=C:\Program Files\MyApp"
SET /p INSTALL_DIR="Путь установки [%INSTALL_DIR%]: "
IF NOT EXIST "%INSTALL_DIR%" mkdir "%INSTALL_DIR%"

REM === КОПИРОВАНИЕ ===
echo Копирование файлов...
xcopy /E /I /Y "%~dp0files*" "%INSTALL_DIR%"
IF %ERRORLEVEL% NEQ 0 (
echo Ошибка копирования!
PAUSE
EXIT /B 1
)

REM === СОЗДАНИЕ ЯРЛЫКА ===
set "DESKTOP=%USERPROFILE%\Desktop"
echo Создание ярлыка на рабочем столе...
powershell -NoProfile -Command "$s=(New-Object -COM WScript.Shell).CreateShortcut('%DESKTOP%\MyApp.lnk');$s.TargetPath='%INSTALL_DIR%\app.exe';$s.Save()"

REM === ДОБАВЛЕНИЕ В PATH ===
echo Добавление в PATH...
SETX PATH "%PATH%;%INSTALL_DIR%"

REM === ЗАВЕРШЕНИЕ ===
COLOR 0A
echo.
echo ====================================
echo Установка успешно завершена!
echo ====================================
echo Установлено в: %INSTALL_DIR%
echo.
PAUSE
EXIT /B 0


Лицензия

MIT

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions