Некоторые интересные примеры исполняемых bat-файлов
Здравствуйте, уважаемые читатели блога MyFirstComp.ru. В сегодняшней статье я решил сделать небольшую подборку готовых bat-файлов, которые, на мой взгляд, довольно интересные, и могут пригодиться как новичкам, так и опытным пользователям. Напомню, чтобы создать bat-файл, необходимо открыть Блокнот, и скопировать туда содержимое, которое будет приведено ниже. После этого нажимаем Файл/Сохранить как, и присваиваем файлу расширение bat, например так: program.bat.
Также можно запрограммировать выполнение «батника» на какой-то определенный день или время с помощью планировщика заданий.
Скажу сразу, что приведенные ниже примеры не претендуют на оригинальность и новизну, и, возможно, вы встречали их ранее. Но, тем не менее, я считаю их полезными, и хочу, чтобы вы с ними ознакомились. Надеюсь, авторы не будут против обнародования их интеллектуальной собственности:).
1. Получаем серийные номера всех съемных устройств и физических жестких дисков, а также имена разделов физических накопителей.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | @echo off&:: by Alex Dragokas Setlocal EnableDelayedExpansion EnableExtensions Echo. ::Получаем PNPDeviceID и PhysicalDrive Name устройств, подключенных по интерфейсу USB echo Перечень cъемных накопителей: echo. For /F "Skip=2 Tokens=2-4 delims=," %%i In ( 'WMIC DiskDrive Where InterfaceType^="USB" Get Name^,PNPDeviceID^,Model /Value /format:csv 2^>nul' ) do ( Set AtLeastOneDevice=true Call :Get_USB_SN "%%k" Device_SN Call :GetPartition "%%j" Drives Echo Model: %%i Echo %%j Echo Disk^(s^): !Drives! Echo Device S/N: "!Device_SN!" Echo. ) if not defined AtLeastOneDevice Echo Съемных USB накопителей не обнаружено. Echo. Echo Перечень жестких дисков: Echo. For /F "Skip=2 Tokens=2-4 delims=," %%i In ( 'WMIC DiskDrive Where "InterfaceType^!^='USB'" Get Name^,PNPDeviceID^,Model /Value /format:csv' ) do ( Call :GetPartition "%%j" Drives Call :Get_HDD_SN "%%j" Device_SN Echo Model: %%i Echo %%j Echo Disk^(s^): !Drives! Echo Device S/N: "!Device_SN!" Echo "!Device_SN!">>%~dp0file.txt Echo. ) pause>nul Goto :eof ::Парсим часть с серийным номером устройства :Get_USB_SN %1-in.PNPDeviceID %2-out.Device_S/N Set "%~2=" Set "PNP=%~1" Set "PNP=%PNP:\=" "%" Set "PNP=%PNP:;=" "%" Set "PNP=%PNP:&=" "%" Set _Prev= For %%i in ("%PNP%") do ( if "!_Prev:~0,4!"=="REV_" (Set "%~2=%%~i"& Exit /B) Set "_Prev=%%~i" ) Exit /B :Get_HDD_SN %1.in-PhysicalDrive_Name %2-out.Device_S/N Set "tag=%~1" Set "tag=%tag:\=\\%" For /F "UseBackQ skip=2 tokens=2 delims=," %%i In ( `wmic path Win32_PhysicalMedia where "tag='%tag%'" Get SerialNumber /format:csv` ) do call set "_serial=%%i" ::Выше используется Call, чтобы удалить служебный символ 0x0D из переменной set "_serial=%_serial: =%" ::Проверяем признак 16-ричного кода (ответ длинной 40 символов) if "%_serial:~39,1%" neq "" Call :Hex_To_String "%_serial%" "_serial" set "%~2=%_serial%" Exit /B :Hex_To_String %1-in.Reversed.Hex.Number %2-out.String SetLocal& set "x16=%~1" set n=45 for %%A in (- . / 0 1 2 3 4 5 6 7 8 9) do set s.!n!=%%A& set /a n+=1 set n=65 for %%A in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do set s.!n!=%%A& set /a n+=1 set n=97 for %%A in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set s.!n!=%%A& set /a n+=1 set xs= for /L %%C in (0,4,8184) do ( if "!x16:~%%C,1!"=="" goto _ex_Hex set /A cplus=%%C+2 call set /A x10=0x%%x16:~!cplus!,2%% call set xs=!xs!%%s.!x10!%% set /A x10=0x!x16:~%%C,2! call set xs=!xs!%%s.!x10!%% ) :_ex_Hex EndLocal& set "%~2=%xs%"& Exit /B ::Конвертация PhysicalDrive Name -> Partition Names -> Drive Names :GetPartition %1.in-PhysicalDrive_Name %2-out.Drive_Names Set "%~2=" For /F "skip=2 delims==, tokens=3,6-7" %%i In ( 'WMIC path Win32_DiskDriveToDiskPartition get /format:csv' ) do ( if %%i=="%~1" ( For /F "skip=2 delims==, tokens=3-4,7" %%I In ( 'WMIC path Win32_LogicalDiskToPartition get Antecedent^,Dependent /format:csv' ) do ( if "%%I,%%J"=="%%j,%%k" Set "%~2=!%~2! %%K" ))) Exit /B |
2. Определяем версию, разрядность и сборку операционной системы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | @echo off SetLocal EnableExtensions Call :GetSystemVersion "OSVer" "Core" "Build" Echo Your operating system: %OSVer% %Core% %Build% pause goto :eof :GetSystemVersion :: Определить версию ОС :: %1-исх.Переменная для хранения названия ОС :: %2-исх.Переменная для хранения разрядности ОС :: %3-исх.Переменная для хранения версии сборки ОС If /i "%PROCESSOR_ARCHITECTURE%"=="x86" (set %~2=x32) else (set %~2=x64) For /F "delims=" %%a in ('ver') do set _ver=%%a Set _ver="%_ver: =" "%" For %%a in (%_ver%) do set _ver=%%~a for /F "delims=]" %%a in ("%_ver%") do set %~3=%%a set _ver=%_ver:~0,3% SET %~1=Unknown if "%_ver%"=="5.0" SET %~1=Windows 2000 if "%_ver%"=="5.1" SET %~1=Windows XP if "%_ver%"=="5.2" SET %~1=Windows 2003 if "%_ver%"=="6.0" ( Reg.exe query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductName"|>nul Find /i "Vista"&&( SET %~1=Windows Vista) || (SET %~1=Windows 2008) ) if "%_ver%"=="6.1" SET %~1=Windows 7 if "%_ver%"=="6.2" SET %~1=Windows 8 if "%_ver%"=="6.3" SET %~1=Windows 8.1 set _ver= Exit /B |
3. Удаляем ярлыки с рабочего стола.
1 2 3 4 5 6 7 8 9 10 11 | @echo off chcp 1251 setlocal set files=Русс.lnk 1111*.lnk *z.lnk %homedrive% if exist "%homedrive%%homepath%\desktop" (set homedesk=desktop) else (set homedesk=Рабочий стол) if exist "%public%" (set comdesk=%public%\%homedesk%) else (set comdesk=%allusersprofile%\%homedesk%) chdir "%homedrive%%homepath%\%homedesk%" for %%a in (%files%) do (echo del /q "%%a"&echo del /q "%comdesk%\%%a" >nul) endlocal chcp 866 |
Подписывайся на канал MyFirstComp на YouTube!