درباره Batch File و دستورات CMD و .BAT

بچ فایل چیست

بچ فایل در واقع فایل متنی با یکی از پسوندهای 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

بسته به فرمان مورد استفاده، خدمات شبکه مختلفی را فراهم می کند.

  • net accounts
  • net computer
  • net config
  • net continue
  • net file
  • net group
  • net help
  • net helpmsg
  • net localgroup
  • net name
  • net pause
  • net print
  • net send
  • net session
  • net share
  • net start
  • net statistics
  • net stop
  • net time
  • net use
  • net user
  • net view
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

برای تعیین متغییر

 

توجه داشته باشیدکه کلیه دستورات CMD در فایل‌های Batch file قابل اجرا می‌باشد

 

چند مثال کاربردی:

باز کردن سایت‌های

یک فایل 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\” فایل‌ها با پسوند مشابه را به دوشه با پسوند مسابه انتقال می‌دهد

 


کد رنگ‌های قابل استفاده:

0 = سیاه 8 = خاکستری
1 = آبی 9 = آبی روشن
2 = سبز A = سیز روشن
 3=ابی B = آبی روشن
4  قرمز C = قرمز روشن
5 = بنفش D = بنفش روشن
6 = زرد E = زرد روشن
7 = سفید F = نقره‌ای

 

 

منابع: + + +

 

خروج از نسخه موبایل