bat-файл

Что такое bat-файлы и как с ними работать?

Привет всем! Помнится, еще сравнительно недавно (пока не изобрели оконный интерфейс) рабочий экран компьютера выглядел достаточно просто — черный экран, и куча символов… приблизительно так:
bat-файл

Тут меня нужно поправить — фоновой картинки не было, экран был черным. Но в любом случае (повторюсь) — выглядело это таинственно, круто, и вообще УХ!

Но отложим воспоминания — вернемся к нашим bat-файлам. Итак…

Файлы bat (также известные как файлы пакетных команд или bat-файлы) — это скрипты, содержащие набор команд, которые могут быть выполнены на компьютере под управлением Windows.

Зачем нужны bat-файлы? Bat-файлы могут быть использованы для автоматизации установки программ, настройки сетевых соединений, настройки системы и многого другого. Удивительно, но они могут также использоваться в процессе разработки программного обеспечения для автоматического выполнения тестов или сборки проектов 😉

Понятно, что за любыми плюсами кроются и некоторые минусы 🙂
Использование bat-файлов может представлять определенные риски, включая следующие:
— Непреднамеренное (или преднамеренное, но об этом позже) изменение системных настроек: если bat-файл используется неправильно, он может изменить настройки операционной системы. Например, bat-файл может изменить параметры реестра, отключить или изменить системные службы или удалить важные системные файлы.
— Уязвимость безопасности: Bat-файлы могут содержать команды, которые открывают уязвимости в системе безопасности. Например, файл может запустить вредоносную программу, создать нового пользователя с административными правами или изменить настройки брандмауэра.
— Нарушение политики безопасности: если bat-файлы используются для автоматизации процессов в организации, они могут нарушать политику безопасности. Например, файл может содержать пароли или конфиденциальные данные, которые могут быть скомпрометированы.
— Непреднамеренные ошибки: bat-файлы могут содержать ошибки, которые могут привести к нежелательным результатам. Например, ошибка в команде может привести к удалению важных файлов.
— Несанкционированное использование: несанкционированные пользователи могут использовать bat-файлы для запуска нежелательных операций, таких как вредоносное программное обеспечение или удаление важных файлов.

Чтобы минимизировать риски, связанные с использованием bat-файлов, необходимо следовать хорошей практике безопасности, такой как проверка файла на вирусы, использование безопасных команд и ограничение прав доступа к файлу (это такой себе «Маст хев», но все же… )

Как создать и работать с bat- файлами?
— Создайте файл bat. Нажмите правой кнопкой мыши на свободной области рабочего стола или в проводнике Windows и выберите «Новый» -> «Текстовый документ». Затем переименуйте файл, чтобы его расширение было .bat, например, «myscript.bat» (я, например, помню те далекие времена, когда еще и Volkov Commander не придумали, потому в описании алгоритма работы с помощью проводника Windows могу и ошибиться в детялях — прошу простить заранее 🙂 ).
— Откройте файл bat в текстовом редакторе, например, в блокноте (ATOM наше все, но все же … ). Введите команды, которые вы хотите выполнить. Что бы было все более наглядно — рассмотрим пример, в котором нам нужно открыть командную строку и вывести текущую директорию:

@echo off
cd %~dp0
cmd /k
  • После чего сохраните bat-файл и закройте его.
  • Чтобы запустить bat-файл, дважды щелкните на нем в проводнике Windows.
  • Впрочем, вы можете также запустить bat-файл и из командной строки. Откройте командную строку и перейдите в каталог, содержащий bat-файл. Затем введите название файла bat, например:
C:\> cd C:\myfolder
C:\myfolder> myscript.bat

Кстати — можно запускать bat-файл с параметрами. Для этого используем конструкцию:

C:\myfolder> myscript.bat param1 param2

Или, можно посмотреть, как сделать bat-файл, предлагающий варианты действий (для этого используется оператор choice):

@echo off
echo Выберите действие:
echo 1 - Запустить программу A
echo 2 - Запустить программу B
echo 3 - Выйти из программы
 
choice /c 123 /n
 
if errorlevel 3 goto end
if errorlevel 2 start "" "C:\Program Files\Program B\program_b.exe" & goto end
if errorlevel 1 start "" "C:\Program Files\Program A\program_a.exe" & goto end
:end
echo До свидания!
pause

Итак, об основах bat-файлов поговорили, теперь давайте посмотрим на команды, которые можно использовать при работе с bat-файлами. Их много. И да — полный список доступен по ссылке на официальном сайте Microsoft 😉 Впрочем — могу и сейчас показать:
active
add
add alias
add volume
append
arp
assign
assoc
at
atmadm
attach-vdisk
attrib
attributes
attributes disk
attributes volume
auditpol
auditpol backup
auditpol clear
auditpol get
auditpol list
auditpol remove
auditpol resourcesacl
auditpol restore
auditpol set
autochk
autoconv
autofmt
automount
bcdboot
bcdedit
bdehdcfg
bdehdcfg driveinfo
bdehdcfg newdriveletter
bdehdcfg quiet
bdehdcfg restart
bdehdcfg size
bdehdcfg target
begin backup
begin restore
bitsadmin
bitsadmin addfile
bitsadmin addfileset
bitsadmin addfilewithranges
bitsadmin cache
bitsadmin cache and delete
bitsadmin cache and deleteurl
bitsadmin cache and getexpirationtime
bitsadmin cache and getlimit
bitsadmin cache and help
bitsadmin cache and info
bitsadmin cache and list
bitsadmin cache and setexpirationtime
bitsadmin cache and setlimit
bitsadmin cache and clear
bitsadmin cancel
bitsadmin complete
bitsadmin create
bitsadmin examples
bitsadmin getaclflags
bitsadmin getbytestotal
bitsadmin getbytestransferred
bitsadmin getclientcertificate
bitsadmin getcompletiontime
bitsadmin getcreationtime
bitsadmin getcustomheaders
bitsadmin getdescription
bitsadmin getdisplayname
bitsadmin geterror
bitsadmin geterrorcount
bitsadmin getfilestotal
bitsadmin getfilestransferred
bitsadmin gethelpertokenflags
bitsadmin gethelpertokensid
bitsadmin gethttpmethod
bitsadmin getmaxdownloadtime
bitsadmin getminretrydelay
bitsadmin getmodificationtime
bitsadmin getnoprogresstimeout
bitsadmin getnotifycmdline
bitsadmin getnotifyflags
bitsadmin getnotifyinterface
bitsadmin getowner
bitsadmin getpeercachingflags
bitsadmin getpriority
bitsadmin getproxybypasslist
bitsadmin getproxylist
bitsadmin getproxyusage
bitsadmin getreplydata
bitsadmin getreplyfilename
bitsadmin getreplyprogress
bitsadmin getsecurityflags
bitsadmin getstate
bitsadmin gettemporaryname
bitsadmin gettype
bitsadmin getvalidationstate
bitsadmin help
bitsadmin info
bitsadmin list
bitsadmin listfiles
bitsadmin makecustomheaderswriteonly
bitsadmin monitor
bitsadmin nowrap
bitsadmin peercaching
bitsadmin peercaching and getconfigurationflags
bitsadmin peercaching and help
bitsadmin peercaching and setconfigurationflags
bitsadmin peers
bitsadmin peers and clear
bitsadmin peers and discover
bitsadmin peers and help
bitsadmin peers and list
bitsadmin rawreturn
bitsadmin removeclientcertificate
bitsadmin removecredentials
bitsadmin replaceremoteprefix
bitsadmin reset
bitsadmin resume
bitsadmin setaclflag
bitsadmin setclientcertificatebyid
bitsadmin setclientcertificatebyname
bitsadmin setcredentials
bitsadmin setcustomheaders
bitsadmin setdescription
bitsadmin setdisplayname
bitsadmin sethelpertoken
bitsadmin sethelpertokenflags
bitsadmin sethttpmethod
bitsadmin setmaxdownloadtime
bitsadmin setminretrydelay
bitsadmin setnoprogresstimeout
bitsadmin setnotifycmdline
bitsadmin setnotifyflags
bitsadmin setpeercachingflags
bitsadmin setpriority
bitsadmin setproxysettings
bitsadmin setreplyfilename
bitsadmin setsecurityflags
bitsadmin setvalidationstate
bitsadmin suspend
bitsadmin takeownership
bitsadmin transfer
bitsadmin util
bitsadmin util and enableanalyticchannel
bitsadmin util and getieproxy
bitsadmin util and help
bitsadmin util and repairservice
bitsadmin util and setieproxy
bitsadmin util and version
bitsadmin wrap
bootcfg
bootcfg addsw
bootcfg copy
bootcfg dbg1394
bootcfg debug
bootcfg default
bootcfg delete
bootcfg ems
bootcfg query
bootcfg raw
bootcfg rmsw
bootcfg timeout
break
cacls
call
cd
certreq
certutil
change
change logon
change port
change user
chcp
chdir
chglogon
chgport
chgusr
chkdsk
chkntfs
choice
cipher
clean
cleanmgr
clip
cls
cmd
cmdkey
cmstp
color
comp
compact
compact vdisk
convert
convert basic
convert dynamic
convert gpt
convert mbr
copy
create
create partition efi
create partition extended
create partition logical
create partition msr
create partition primary
create volume mirror
create volume raid
create volume simple
create volume stripe
cscript
date
dcgpofix
defrag
del
delete
delete disk
delete partition
delete shadows
delete volume
detach vdisk
detail
detail disk
detail partition
detail vdisk
detail volume
dfsdiag
dfsdiag testdcs
dfsdiag testdfsconfig
dfsdiag testdfsintegrity
dfsdiag testreferral
dfsdiag testsites
dfsrmig
diantz
dir
diskcomp
diskcopy
diskpart
diskperf
diskraid
diskshadow
dispdiag
dnscmd
doskey
driverquery
echo
edit
endlocal
end restore
erase
eventcreate
Evntcmd
exec
exit
expand
expand vdisk
expose
extend
extract
fc
filesystems
find
findstr
finger
flattemp
fondue
for
forfiles
format
freedisk
fsutil
fsutil 8dot3name
fsutil behavior
fsutil dirty
fsutil file
fsutil fsinfo
fsutil hardlink
fsutil objectid
fsutil quota
fsutil repair
fsutil reparsepoint
fsutil resource
fsutil sparse
fsutil tiering
fsutil transaction
fsutil usn
fsutil volume
fsutil wim
ftp
ftp append
ftp ascii
ftp bell
ftp binary
ftp bye
ftp cd
ftp close
ftp debug
ftp delete
ftp dir
ftp disconnect
ftp get
ftp glob
ftp hash
ftp lcd
ftp literal
ftp ls
ftp mget
ftp mkdir
ftp mls
ftp mput
ftp open
ftp prompt
ftp put
ftp pwd
ftp quit
ftp quote
ftp recv
ftp remotehelp
ftp rename
ftp rmdir
ftp send
ftp status
ftp trace
ftp type
ftp user
ftp verbose
ftp mdelete
ftp mdir
ftype
fveupdate
getmac
gettype
goto
gpfixup
gpresult
gpt
gpupdate
graftabl
help
helpctr
hostname
icacls
if
import (shadowdisk)
import (diskpart)
inactive
ipconfig
ipxroute
irftp
jetpack
klist
ksetup
ksetup addenctypeattr
ksetup addhosttorealmmap
ksetup addkdc
ksetup addkpasswd
ksetup addrealmflags
ksetup changepassword
ksetup delenctypeattr
ksetup delhosttorealmmap
ksetup delkdc
ksetup delkpasswd
ksetup delrealmflags
ksetup domain
ksetup dumpstate
ksetup getenctypeattr
ksetup listrealmflags
ksetup mapuser
ksetup removerealm
ksetup server
ksetup setcomputerpassword
ksetup setenctypeattr
ksetup setrealm
ksetup setrealmflags
ktmutil
ktpass
label
list
list providers
list shadows
list writers
load metadata
lodctr
logman
logman create
logman create alert
logman create api
logman create cfg
logman create counter
logman create trace
logman delete
logman import and logman export
logman query
logman start and logman stop
logman update
logman update alert
logman update api
logman update cfg
logman update counter
logman update trace
logoff
lpq
lpr
macfile
makecab
manage bde
manage bde status
manage bde on
manage bde off
manage bde pause
manage bde resume
manage bde lock
manage bde unlock
manage bde autounlock
manage bde protectors
manage bde tpm
manage bde setidentifier
manage bde forcerecovery
manage bde changepassword
manage bde changepin
manage bde changekey
manage bde keypackage
manage bde upgrade
manage bde wipefreespace
mapadmin
md
merge vdisk
mkdir
mklink
mmc
mode
more
mount
mountvol
move
mqbkup
mqsvc
mqtgsvc
msdt
msg
msiexec
msinfo32
mstsc
nbtstat
netcfg
netdom
net print
netsh
netstat
nfsadmin
nfsshare
nfsstat
nlbmgr
nltest
nslookup
nslookup exit Command
nslookup finger Command
nslookup help
nslookup ls
nslookup lserver
nslookup root
nslookup server
nslookup set
nslookup set all
nslookup set class
nslookup set d2
nslookup set debug
nslookup set domain
nslookup set port
nslookup set querytype
nslookup set recurse
nslookup set retry
nslookup set root
nslookup set search
nslookup set srchlist
nslookup set timeout
nslookup set type
nslookup set vc
nslookup view
ntbackup
ntcmdprompt
ntfrsutl
offline
offline disk
offline volume
online
online disk
online volume
openfiles
pagefileconfig
path
pathping
pause
pbadmin
pentnt
perfmon
ping
pktmon
pnpunattend
pnputil
popd
powershell
powershell ise
print
prncnfg
prndrvr
prnjobs
prnmngr
prnport
prnqctl
prompt
pubprn
pushd
pushprinterconnections
pwlauncher
pwsh
qappsrv
qprocess
query
query process
query session
query termserver
query user
quser
qwinsta
rd
rdpsign
recover
recover disk group
refsutil
reg
reg add
reg compare
reg copy
reg delete
reg export
reg import
reg load
reg query
reg restore
reg save
reg unload
regini
regsvr32
relog
rem
remove
ren
rename
repadmin
repair
repair bde
replace
rescan
reset
reset session
retain
revert
rexec
risetup
rmdir
robocopy
route ws2008
rpcinfo
rpcping
rsh
rundll32
rundll32 printui
rwinsta
san
sc config
sc create
sc delete
sc query
schtasks
scwcmd
scwcmd analyze
scwcmd configure
scwcmd register
scwcmd rollback
scwcmd transform
scwcmd view
secedit
secedit analyze
secedit configure
secedit export
secedit generaterollback
secedit import
secedit validate
select
select disk
select partition
select vdisk
select volume
serverceipoptin
servermanagercmd
serverweroptin
set environmental variables
set shadow copy
set context
set id
setlocal
set metadata
set option
set verbose
setx
sfc
shadow
shift
showmount
shrink
shutdown
simulate restore
sort
start
subcommand set device
subcommand set drivergroup
subcommand set drivergroupfilter
subcommand set driverpackage
subcommand set image
subcommand set imagegroup
subcommand set server
subcommand set transportserver
subcommand set multicasttransmission
subcommand start namespace
subcommand start server
subcommand start transportserver
subcommand stop server
subcommand stop transportserver
subst
sxstrace
sysocmgr
systeminfo
takeown
tapicfg
taskkill
tasklist
tcmsetup
telnet
telnet close
telnet display
telnet open
telnet quit
telnet send
telnet set
telnet status
telnet unset
tftp
time
timeout
title
tlntadmn
tpmtool
tpmvscmgr
tracerpt
tracert
tree
tscon
tsdiscon
tsecimp
tskill
tsprof
type
typeperf
tzutil
U
unexpose
uniqueid
unlodctr
ver
verifier
verify
vol
vssadmin
vssadmin delete shadows
vssadmin list shadows
vssadmin list writers
vssadmin resize shadowstorage
waitfor
wbadmin
wbadmin delete catalog
wbadmin delete systemstatebackup
wbadmin disable backup
wbadmin enable backup
wbadmin get disks
wbadmin get items
wbadmin get status
wbadmin get versions
wbadmin restore catalog
wbadmin start backup
wbadmin start recovery
wbadmin start sysrecovery
wbadmin start systemstatebackup
wbadmin start systemstaterecovery
wbadmin stop job
wdsutil
wecutil
wevtutil
where
whoami
winnt
winnt32
winrs
winsat mem
winsat mfmedia
wmic
writer
wscript
xcopy

Подробности по использованию каждой из команд вы можете найти на том же адресе, где и весь список — я, честно сказать, не вижу смысла переписывать содержимое официальной документации 🙂
Но возникает вопрос — к чему это все нагорожено? К тому, что в следующей записи я покажу, как с помощью штатных команд, используемых при работе с bat-файлами можно обмануть пользователя, и заставить компьютер сделать то, что он не хочет. Использовать эти знания можно и нужно на свой страх и риск с соблюдением всех правил законов, да.

Как всегда в случае возникновения вопросов — пишите на почту или в Telegram.