بچ فایل چیست
بچ فایل در واقع فایل متنی با یکی از پسوندهای bat. یا cmd. و یا btm. است و شامل یک سری دستور (Command) میشود که وقتی آن را اجرا میکنید مستقیماً وارد محیط CMD یا همان Command Prompt شده و دستورات را بهصورت اتوماتیک و پشت سر هم انجام میدهد.
شروع
برای ساخت یک فایل BAT به راحتی میتوانید برنامه Notepad ویندوز را باز کنید فرمت آن را AllFile قرار دهید. سپس پسوند آن را به bat. تغییر دهید
می توانید دستورات را داخل همین فیل متی بنویسید و یا بر ری فایل ساخته شده کلیک راست و Edit را انتخاب کنید
لیست برخی از دستورات مهم
Title: این دستور عنوان پنجره CMD را به مشخص میکند.
Echo: این دستور برای نمایش متن در محیط استفاده میشود.
Echo off@: این دستور از نمایش خط مورد استفاده جلوگیری میکند(مشخص میکند این یک فایل غیر تعاملی یا Non-Interactive است)
Cls: این دستور برای پاک کردن محیط CMD استفاده میشود.
Pause: هنگامی که در اجرای بچ فایل به این دستور برسید، برنامه برای اجرای بقیه دستورات منتظر میماند تا کاربر یکی از دکمههای کیبورد را بفشارد.
Exit: این دستور برای خروج از محیط CMD استفاده میشود.
Color: تعیین رنگ متن و پس ضمینه (لیست کد رنگهای در دسترسی)
Rem: امکان نوشتن توضیحات در فایل که در اجرا نقشی ندارد
دونقطه (:): ایجاد بخش یا فهرست
Goto: این دستور برو به بخش یا فهرست خاص را امکان پذیر میکند
Start: این دستور جهت اجرا یک برنامه مورد استفاده قرار میگیرد.
start “” [website]: آدرس وب داده شده را در مرورگر پیشفرض باز میکند.
Set: برای مشخص نمودن ورودیها و تغییر Variable ها(متغییرها) استفاده میشود.(پارامتر /a برای محاسبات و ورودی باید فقط عدد باشد. پارامتر /p برای هر نوع ورودی دلخواه استفاده میشود)
IF: برای مشخص نمودن شرط استفاده میشود(با پارامتر NOT میتوان شرط را معکوس همچین برای شروط دقیقترمیتوان از EQU : مساوی است با – NEQ : مساوی نیست با – LSS : کمتر است از – LEQ : کمتر یا مساوی است با – GTR : بزرگتر است از == : مقایسه دو مقدار ، استفاده کرد)
&: اجرا دستور دیگر در همان خط دستور
&&: اجرای دستور بعد و بررسی صحت عملکرد دستور قبل
FOR: برای ایجاد چرخه (LOOP) استفاده میشود و میتوانید فایلها و پوشهها و یا هر دو آنها را بررسی کرد
لیست ۵۰ دستور مهم CMD
# | دستور و توضیحات |
---|---|
1 | VER
نمایش نسخه سیستم عامل |
2 | ASSOC
نمایش و ویرایش پسوند فایلها با File Type ها |
3 | CD
برای حرکت بین پوشه ها در درایو |
4 | CLS
پاک کردن متنهای موجود در صفحه |
5 | COPY
برای کپی گرفتن از فایلها |
6 | DEL
برای پاک کردن فایلها و پوشهها |
7 | DIR
برای فهرست گیری از فایلهای موجود |
8 | DATE
برای نمایش و تغییر تاریخ |
9 | ECHO
برای نمایش یا عدم نمایش متن در دو حالت روشن و خاموش |
10 | EXIT
برای خروج از محیط |
11 | MD
برای ساخت یک پوشه |
12 | MOVE
برای انتقال فایلها به محل دیگر |
13 | PATH
برای نمایش یا مشخص نمودن مسیر |
14 | PAUSE
توقف و انتضار برای وارد کردن یک کلید توسط کاربر |
15 | PROMPT
برای تغییر در مسیر cmd.exe و تغییر نام خط فرمان |
16 | RD
برای حذف پوشهها و دایرکتوریها |
17 | REN
برای تغییر نام فایلها و پوشهها |
18 | REM
برای نوشتن توضیحات و ریمارک نویسی |
19 | START
برای اجرای برنامه در صفحه جدید |
20 | TIME
نمایش تغییر ساعت |
21 | TYPE
برای نمایش محتوی فایل متنی |
22 | VOL
برای نمایش سریال و نام درایوها |
23 | ATTRIB
برای تغیر ویژگی فایلها و پوشهها به Read Only – System – Archive – Hidden |
24 | CHKDSK
برای بررسی مشکلات دیسک |
25 | CHOICE
برای ایجاد توانایی انتخاب گزینه توسط کاربر |
26 | CMD
برای اجرا خط فرمان CMD |
27 | COMP
برای مقایسه حجم دو فایل |
28 | CONVERT
برای تبدیل فرمت یک درایو از FAT به NTFS |
29 | DRIVERQUERY
برای نمایش Driver های نصب شده در ویندوز |
30 | EXPAND
برای استخراج فایلهای .cab |
31 | FIND
برای پیدا کردن یک کلمه یا جمله در یک فایل متنی |
32 | FORMAT
برای فرمت کردن یک درایو |
33 | HELP
برای استفاده از راهنما |
34 | IPCONFIG
برای نمایش تنظیمات و پیکربندی IP |
35 | LABEL
برای اضافه، حذف و یا تغیر عنوان دیسک |
36 | MORE
برای نمایش محتوای فایلهای متنی بصورت خطی |
37 | NET
بسته به فرمان مورد استفاده، خدمات شبکه مختلفی را فراهم می کند.
|
38 | PING
برای ارسال پکتها به یک آدرس و انتظار برای رسیدن جواب در بستر شبکه |
39 | SHUTDOWN
برای خاموش و ریستارت و Logoff کردن Shutdown /s Shutdown /r Shutdown /l |
40 | SORT
برای مرتبسازی یک ورودی و نمایش بر اساس حروف الفبا |
41 | SUBST
برای ساخت درایو مجازی |
42 | SYSTEMINFO
برای نمایش اطلاعات سیستم |
43 | TASKKILL
برای بستن برنامهها و پرسسهای در اجرا |
44 | TASKLIST
برای فهرست گیری از برنامهها و پرسسهای در اجرا |
45 | XCOPY
برای کپی و انتقال فایلها و پوشهها |
46 | TREE
برای فهرستگیری از پوشهها و فایلهای بصورت درختی |
47 | FC
برای بررسی تفاوت دو فایل |
48 |
DISKPARTبرنامه مدیریت پارتیشن در خط فرمان، امان ایجاد،حذف، تغییر و تبدیل GPT به MBR یا Dynamic به Static |
49 | TITLE
برای تغییر عنوان صفحه |
50 | SET
برای تعیین متغییر |
چند مثال کاربردی:
باز کردن سایتهای
یک فایل batch file ایجاد میکنیم و محتوی مورد نظر را بصورت زیر در آن قرار میدهیم
@echo off
start "" https://amirweb.me
start "" https://ebanking.bankmellat.ir/ebanking/#/
start "" https://www.instagram.com/amirweb.me/
start "" https://www.google.com/
توضیح:
با دستور @echo off غیر تعاملی بودن را فعال میکنیم
با دستور start و آدرس سایت مورد نظر را به فایل میدهید کاراکتر “” هم باز شدن در تب جدید را برای ما فراهم میکن
بررسی باز بودن پورت
در این مطلب در مورد نحوه تشخیص باز یا بسته بودن پورت نوشته ام در انجا می خواهیم با برنامه PortyQry.exe مراحل بررسی را کاربر پسند کنیم
یک فایل batch file ایجاد میکنیم و محتوی مورد نظر را بصورت زیر در آن قرار میدهیم فایل PortyQry.exe را در کنارش قرار مدهیم
@echo off
Title Port Status Check Created BY Amirweb.me & Color 0a
cls
set /p host="Host? "
set /p port="Port? "
.\PortyQry.exe -n %host% -e %port%
pause
توضیح:
با دستور @echo off غیر تعاملی بودن را فعال میکنیم
Title عنوان را به دلخواه تغییر میدهیم
با & دستور بعدی در همان خط را قابل اجرا میکنیم
با Color رنگ ضمینه و متن را تغییر میدهیم
cls صفحه را پاکسازی میکنیم
set /p host=”Host? “ متغییری به نام host تعیرف میکنیم set /p از کاربر ورودی را دریافت میکند
set /p port=”Port? “ منغییری به نام Port تعریف میکنیم set /p از کاربر ورودی را دریافت میکند
.\ به پوشهای که فایل در آن اجرا شد ارجا میدهد PortyQry.exe -n %host% -e %port% برنامه را با سویچ -n و مقدار متغییر %host% را جاگذاری میکند و با سیوچ -e مقدار %port% را جاگذاری و اجرا میکند
Pause مانع از بسته شدن فایل میشود تا زمانی که کاربر کلیدی را فشار دهد
پشتیبانگیری
در اینجا میخواهیم از فایلها و پوشههای مورد نظر در محل مورد نظر پشتیبان (Backup) بگیریم،این پشتیبان اینگونه عمل کند که در محل پشتیبانگیری یک پوشه با نام تاریخ ایجاد کند و کلیه فایلها و پوشهها را کپی کند
یک فایل batch file ایجاد میکنیم و محتوی مورد نظر را بصورت زیر در آن قرار میدهیم
@ECHO OFF
set source=C:\amirweb\
set destination=d:\Backup\
for /F "tokens=2-4 delims=/ " %%i in ('date /t') do set yyyymmdd1=%%j"."%%i"."%%k
if exist %destination% goto GO
:GO
mkdir %destination%%yyyymmdd1%
xcopy %source%* %destination%%yyyymmdd1% /s/d/y/c/v/r
echo.
echo Finished copying %source% to %destination%
echo.
echo Created %destination%%yyyymmdd1%
pause
توضیح:
با دستور @echo off غیر تعاملی بودن را فعال میکنیم
توسط دستور set دو متغییر بنام source ( برای پوشه مورد نظر) و destination (آدرس مقصد) تعیین میکنیم
FOR یک چرخه ایجاد میکنم و از دستور date /t که خروجی به شکل Sat 05/25/2019 دارد تاریخ را استخراج میکنیم
با دستور tokens بخش مورد نظر از تاریخ را انتخاب میکنم (۲ از ۴) و آن را با دستور set داخل متغییر به نام yyyymmdd1 قرار میدهیم
با if یک شرط برقرار میکنیم که اگر مقصد مجود داشت با goto به منوی GO برو
:GO منوی و لیبل GO را میسازیم
با دستور mkdir برای ساخت پوشه دو متغییر %destination% مقصد و %yyyymmdd1% برای نام پوشه بر اساس تاریخ را ایجاد میکنیم
با دستور xcopy از متغییر source مسیر را دریافت میکنیم * به مفهوم کلیه فایلها میباشد، مسیر مصد را از دو متغییر %destination% %yyyymmdd1% به دستور میدهیم
برای دستور xcopy سویچ و پارامترهای /s/d/y/c/v/r را انتخاب میکنیم (/s کپی پوشهو زیر پوشهها – /d فایلهای کپی شده در تاریخ یا بعد از تاریخ مشخص شده تغییر کرده است. اگر هیچ تاریخی داده نشود، فقط آن فایلهایی را که زمان منبع تازهتر از زمان مقصد هستند کپی میکند. – /y برای اوررایت و عدم توقف – /c عدم توقف برای خطاها- /v اطمینان از قابل خواندن بودن – /r نوشتن فایلهای فقط خواندنی)
با دستور echo به کاربر در مورد اتمام عملیات اطلاع میدهیم
Pause مانع از بسته شدن فایل میشود تا زمانی که کاربر کلیدی را فشار دهد
یافتن نسخه ویندوز
میخواهیم نسخه ویندوز را مشخص کنیم
یک فایل batch file ایجاد میکنیم و محتوی مورد نظر را بصورت زیر در آن قرار میدهیم
@echo off
for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j
if "%version%" == "6.0" echo Windows Vista.
if "%version%" == "6.1" echo Windows 7
if "%version%" == "6.2" echo Windows 8
if "%version%" == "6.3" echo Windows 8.1
if "%version%" == "10.0" echo Windows 10.
Pause
توضیح:
با دستور @echo off غیر تعاملی بودن را فعال میکنیم
FOR یک چرخه ایجاد میکنم
ver برای بدست آوردن نسخه ویندوز( چیزی مثال Microsoft Windows [Version 10.0.18362.116] )
tokens=4-5 مقدار بست آمده را تقسیم میکند یه ۵ قسمت و قسمت ۴ را نگه می دارد با delims (در انجا 10.0)
set VERSION=%%i.%%j مقدار بدست آمده را بعنوان VERSION یک متغییر در نظر میگیرد
if “%version%” مقدار VERSION را با == بررسی میکند در هر چرخه اگر با مقدار if برابر باشد echo آن خط را نمایش میدهد
Pause مانع از بسته شدن فایل میشود تا زمانی که کاربر کلیدی را فشار دهد
تشخیص ۳۲ بیتی یا ۶۴ بیتی بودن ویندوز
میخواهیم ۳۲ بیتی یا ۶۴ بیتی بودن ویندوز را مشخص کنیم
یک فایل batch file ایجاد میکنیم و محتوی مورد نظر را بصورت زیر در آن قرار میدهیم
@echo off
echo Detecting OS processor type
if /i "%PROCESSOR_IDENTIFIER:~0,3%"=="X86" (
echo system is x86
echo 32-bit...
) else (
echo 64-bit...
)
pause
توضیح:
با دستور @echo off غیر تعاملی بودن را فعال میکنیم
با echo متن دلخواه را مینویسیم
شرط را با if آغاز میکنیم با سویچ /I غیر حساس بودن به مقدار را تعیین میکنم(یعنی فقط قسمیتی از وروردی برابر باشد کافیست)
PROCESSOR_IDENTIFIER یکی از مقدارها ویندوز برای نمایش نوع پردازندش ویندوز میباشد از انجا که در ویندوزهای ۳۲ بیتی کلمه X86 را در این مقدار درج میکند در اینجا از آن استفاده میکنیم
که اگر در مقدار دریافتی از PROCESSOR_IDENTIFIER کلمه X86 وجود داشت با echo بنویس 32-bit
) else ( مشخص میکند که در غیر این صورت با echo بنویس 64-bit
Pause مانع از بسته شدن فایل میشود تا زمانی که کاربر کلیدی را فشار دهد
PING کردن گوگل
می خواهیم با اجرا یک batch file بصورت مداور سایت گوگل ping شود
یک فایل batch file ایجاد میکنیم و محتوی مورد نظر را بصورت زیر در آن قرار میدهیم
@echo off
title pinging www.GOOGLE.com
echo TEST: Pinging Google
ping google.com -t
توضیح:
با دستور @echo off غیر تعاملی بودن را فعال میکنیم
با دستور title عنوان صفحه را تغییر میدهیم
با echo متن دلخواه را نمایش میدهیم
با دستور ping و آدرس سایت مرود نظر که با سویچ -t جهت ادامه دار بودن فعال است
یک مثال برای ساخت منو
میخواهیم با اجرای اسکریپت از کاربر جهت اجرای برنامه notepad یا calculator سوال کند و به نسبت ورودی اطلاعات برنامه مورد نظر را باز کند
یک فایل batch file ایجاد میکنیم و محتوی مورد نظر را بصورت زیر در آن قرار میدهیم
@Echo off
Title Create Batch Menu
:Menu
Color 0a
Echo ______________________________________
Echo.
Echo Please Choose one of the following menu
Echo Press n for open notepad
Echo Press c for open calculator
Echo ______________________________________
Echo.
SET /P M=Type n or c and Press Enter:
IF %M%==n goto Notepad
IF %M%==c goto Calculator
Goto Menu
:Notepad
Start Notepad
EXIT
:Calculator
Start Calc
EXIT
توضیح:
با دستور @echo off غیر تعاملی بودن را فعال میکنیم
با دستور Title عنوان صفحه را تغییر میدهیم
با : یک لیبل به نام Menu ایجاد میکنیم
Color رنگ ضمینه و نوشته را تغییر میدهیم
با Echo متن و خط برای ایجاد محیط بهتر ایجاد میکینم
با SET یک متغییر به نام M تعیین با سویچ /p آن را از ورودی کاربر دریافت خواهیم کرد
با IF شرط برقرار مینیم که اگر وروردی کاربر برای متغییر M کاراکتر n بود با دستور goto به لیبل(منوی)Notepad برو و در صورت c بودن به منوی Calculator برو
Goto Menu باعث می ؤود برنامه در لیبل Menu که در اول ایجاد کردیم منتظر بماند
:Notepad همان لیبلیست که برای Notepad ایجاد کردیم در صورتی که این لیبل انتخاب شود دستور Start Notepad اجرا میشود
:Calculator همان لیبلیست که برای Calculator ایجاد کردیم در صورتی که این لیبل انتخاب شود دستور Start Calc اجرا میشود
EXIT بعد از اتمام برنامه را میبندد
مرتبسازی فایلها
می خواهیم با اجرا یک batch file کلیه فایلهای پوشهای که فایل در آن است را بر اساس فرمت و نوع فایل در داخل پوشههای مربوط طبقهبندی کنیم
یک فایل batch file ایجاد میکنیم و محتوی مورد نظر را بصورت زیر در آن قرار میدهیم
@echo off
rem For each file in your folder
for %%a in (".\*") do (
rem check if the file has an extension and if it is not our script
if "%%~xa" NEQ "" if "%%~dpxa" NEQ "%~dpx0" (
rem check if extension folder exists, if not it is created
if not exist "%%~xa" mkdir "%%~xa"
rem Move the file to directory
move "%%a" "%%~dpa%%~xa\"
))
پوشه مثال:
با اجرا فایل به این صورت مرتب میشود
توضیح:
سطح این اسکریپ پیشرفته میباشد و کمی گیج کننده به نظر میآید
با دستور @echo off غیر تعاملی بودن را فعال میکنیم
rem یک توضیح برای خودمات نوشتهایم که این فایل برای چه کاریست
FOR یک چرخه ایجاد میکنم
%%a به معنی کار با تکتک فایلهای موجود در فولدری است که فایل bat در آن اجرا میشود.
(“.\”) به معنی فولدر ریشهای است.
%~xa برای بررسی پسوند و فرمت فایل میباشد
NEQ : مساوی نبودن پشوندها را بررسی میکند
mkdir “%%~xa” یک پوه همنام پسوند فایل ایجاد میکند
move “%%a” “%%~dpa%%~xa\” فایلها با پسوند مشابه را به دوشه با پسوند مسابه انتقال میدهد