انتقل إلى المحتوى الرئيسي

المختبر 7.3: سكربتات Batch في ويندوز

الأهداف التعليمية​

في نهاية هذا المختبر، ستكون قادرًا على:

  • إنشاء سكربتات Batch (.bat) للأتمتة
  • استخدام المتغيرات وهياكل التحكم
  • إدارة الملفات والمجلدات باستخدام batch
  • إنشاء قوائم تفاعلية

المدة المقدرة​

45 دقيقة

المتطلبات المسبقة​

  • VM ويندوز 10/11
  • معرفة أساسية بـ CMD
  • محرر نصوص (Notepad++)

السياق المهني​

تُستخدم سكربتات Batch لـ:

  • أتمتة المهام المتكررة
  • التثبيت والتكوين
  • صيانة النظام
  • سكربتات بدء التشغيل

الجزء 1: أساسيات سكربتات Batch​

الخطوة 1.1: أول سكربت​

قم بإنشاء ملف premier_script.bat:

@echo off
echo =================================
echo MON PREMIER SCRIPT BATCH
echo =================================
echo.
echo Bonjour, bienvenue dans le scripting Batch!
echo.
pause

التفسيرات:

  • @echo off: يخفي الأوامر (يعرض فقط النتائج)
  • echo: يعرض نصًا
  • echo.: يعرض سطرًا فارغًا
  • pause: ينتظر حتى يضغط المستخدم على مفتاح

الخطوة 1.2: تشغيل السكربت​

cd C:\chemin\vers\script
premier_script.bat

السؤال 1: ماذا يحدث إذا أزلت @echo off؟

الخطوة 1.3: المتغيرات​

@echo off
echo === VARIABLES BATCH ===
echo.

:: Definir des variables
set NOM=Utilisateur
set VERSION=1.0

:: Utiliser les variables
echo Bonjour, %NOM%!
echo Version du script: %VERSION%
echo.

:: Variable d'environnement
echo Nom de l'ordinateur: %COMPUTERNAME%
echo Utilisateur: %USERNAME%
echo Date: %DATE%
echo Heure: %TIME%

pause

الخطوة 1.4: إدخال المستخدم​

@echo off
echo === ENTREE UTILISATEUR ===
echo.

set /p PRENOM=Entrez votre prenom:
echo.
echo Bonjour, %PRENOM%!

set /p AGE=Entrez votre age:
echo Vous avez %AGE% ans.

pause

الجزء 2: هياكل التحكم​

الخطوة 2.1: شرط IF​

@echo off
echo === CONDITIONS IF ===
echo.

set /p REPONSE=Voulez-vous continuer? (O/N):

if /i "%REPONSE%"=="O" (
echo Vous avez choisi de continuer.
) else (
echo Au revoir!
)

pause

خيارات IF:

  • /i: يتجاهل حالة الأحرف (O = o)
  • ==: مساواة
  • NEQ: مختلف
  • GTR: أكبر من
  • LSS: أصغر من

الخطوة 2.2: التحقق من الملفات​

@echo off
echo === VERIFICATION FICHIERS ===
echo.

set FICHIER=C:\Windows\System32\cmd.exe

if exist "%FICHIER%" (
echo Le fichier %FICHIER% existe.
) else (
echo Le fichier n'existe pas.
)

:: Verifier un dossier
if exist "C:\Temp\" (
echo Le dossier C:\Temp existe.
) else (
echo Le dossier n'existe pas.
mkdir C:\Temp
echo Dossier cree.
)

pause

الخطوة 2.3: حلقة FOR​

@echo off
echo === BOUCLES FOR ===
echo.

:: Boucle simple
echo Comptage de 1 a 5:
for /l %%i in (1,1,5) do echo %%i

echo.

:: Parcourir des fichiers
echo Fichiers .txt dans le dossier courant:
for %%f in (*.txt) do echo - %%f

echo.

:: Parcourir un dossier
echo Contenu de C:\Windows (premiers 5 elements):
set COUNT=0
for /d %%d in (C:\Windows\*) do (
set /a COUNT+=1
if !COUNT! LEQ 5 echo - %%d
)

pause

ملاحظة: في سكربتات .bat، استخدم %% للمتغيرات في الحلقات. في سطر الأوامر المباشر، استخدم %.


الجزء 3: سكربتات عملية​

الخطوة 3.1: سكربت تنظيف​

قم بإنشاء nettoyage.bat:

@echo off
setlocal enabledelayedexpansion

echo ============================================
echo SCRIPT DE NETTOYAGE SYSTEME
echo ============================================
echo.

:: Verification admin
net session >nul 2>&1
if %errorlevel% neq 0 (
echo [ERREUR] Ce script doit etre execute en tant qu'administrateur.
pause
exit /b 1
)

echo [1/4] Nettoyage des fichiers temporaires utilisateur...
if exist "%TEMP%\*" (
del /q /f "%TEMP%\*" 2>nul
echo Fichiers temp utilisateur nettoyes.
) else (
echo Aucun fichier a nettoyer.
)

echo.
echo [2/4] Nettoyage des fichiers temporaires systeme...
if exist "C:\Windows\Temp\*" (
del /q /f "C:\Windows\Temp\*" 2>nul
echo Fichiers temp systeme nettoyes.
)

echo.
echo [3/4] Vidage de la corbeille...
rd /s /q %SYSTEMDRIVE%\$Recycle.Bin 2>nul
echo Corbeille videe.

echo.
echo [4/4] Nettoyage termine!
echo.

pause

الخطوة 3.2: سكربت معلومات النظام​

قم بإنشاء info_systeme.bat:

@echo off
setlocal

echo ============================================
echo INFORMATIONS SYSTEME
echo ============================================
echo.

:: Date et heure
echo Date: %DATE%
echo Heure: %TIME%
echo.

:: Informations machine
echo === MACHINE ===
echo Nom: %COMPUTERNAME%
echo Utilisateur: %USERNAME%
echo Domaine: %USERDOMAIN%
echo.

:: Systeme d'exploitation
echo === SYSTEME D'EXPLOITATION ===
for /f "tokens=2 delims==" %%a in ('wmic os get caption /value') do echo OS: %%a
for /f "tokens=2 delims==" %%a in ('wmic os get version /value') do echo Version: %%a
echo.

:: Memoire
echo === MEMOIRE ===
for /f "tokens=2 delims==" %%a in ('wmic computersystem get totalphysicalmemory /value') do (
set /a RAM=%%a / 1073741824
echo RAM Totale: !RAM! Go
)
echo.

:: CPU
echo === PROCESSEUR ===
for /f "tokens=2 delims==" %%a in ('wmic cpu get name /value') do echo CPU: %%a
echo.

:: Disques
echo === DISQUES ===
wmic logicaldisk get deviceid,size,freespace /format:table
echo.

:: Reseau
echo === RESEAU ===
ipconfig | findstr /i "IPv4 Masque Passerelle"
echo.

echo ============================================
pause

الخطوة 3.3: قائمة تفاعلية​

قم بإنشاء menu.bat:

@echo off
setlocal enabledelayedexpansion

:MENU
cls
echo ============================================
echo MENU PRINCIPAL
echo ============================================
echo.
echo 1. Informations systeme
echo 2. Liste des processus
echo 3. Configuration reseau
echo 4. Liste des services actifs
echo 5. Creer un rapport complet
echo 6. Quitter
echo.
echo ============================================
set /p CHOIX=Votre choix (1-6):

if "%CHOIX%"=="1" goto INFO
if "%CHOIX%"=="2" goto PROCESS
if "%CHOIX%"=="3" goto RESEAU
if "%CHOIX%"=="4" goto SERVICES
if "%CHOIX%"=="5" goto RAPPORT
if "%CHOIX%"=="6" goto FIN

echo Choix invalide!
pause
goto MENU

:INFO
cls
echo === INFORMATIONS SYSTEME ===
systeminfo | findstr /i "OS Version Proprietaire"
echo.
pause
goto MENU

:PROCESS
cls
echo === PROCESSUS EN COURS ===
tasklist | more
pause
goto MENU

:RESEAU
cls
echo === CONFIGURATION RESEAU ===
ipconfig /all
pause
goto MENU

:SERVICES
cls
echo === SERVICES ACTIFS ===
net start
pause
goto MENU

:RAPPORT
cls
echo === CREATION DU RAPPORT ===
set RAPPORT=%USERPROFILE%\Desktop\rapport_systeme.txt
echo Rapport systeme - %DATE% %TIME% > "%RAPPORT%"
echo ============================== >> "%RAPPORT%"
echo. >> "%RAPPORT%"
systeminfo >> "%RAPPORT%"
echo. >> "%RAPPORT%"
echo === RESEAU === >> "%RAPPORT%"
ipconfig /all >> "%RAPPORT%"
echo. >> "%RAPPORT%"
echo === SERVICES === >> "%RAPPORT%"
net start >> "%RAPPORT%"
echo.
echo Rapport sauvegarde: %RAPPORT%
pause
goto MENU

:FIN
cls
echo Au revoir!
timeout /t 2
exit /b 0

الجزء 4: إدارة الأخطاء​

الخطوة 4.1: رموز الإرجاع​

@echo off
echo === GESTION DES ERREURS ===
echo.

:: Executer une commande
ping -n 1 google.com >nul 2>&1

:: Verifier le resultat
if %errorlevel%==0 (
echo [OK] Connexion Internet active
) else (
echo [ERREUR] Pas de connexion Internet
)

echo.

:: Tester l'existence d'un fichier
dir C:\Windows\System32\cmd.exe >nul 2>&1
if %errorlevel%==0 (
echo [OK] cmd.exe trouve
) else (
echo [ERREUR] cmd.exe non trouve
)

pause

الخطوة 4.2: التسجيل​

@echo off
setlocal

set LOGFILE=C:\Temp\script_log.txt

:: Fonction de log
call :LOG "Script demarre"

:: Operations
call :LOG "Verification du reseau..."
ping -n 1 127.0.0.1 >nul
if %errorlevel%==0 (
call :LOG "Reseau OK"
) else (
call :LOG "ERREUR: Reseau KO"
)

call :LOG "Script termine"
echo Log sauvegarde: %LOGFILE%
type %LOGFILE%
pause
goto :EOF

:LOG
echo [%DATE% %TIME%] %~1 >> %LOGFILE%
echo [%DATE% %TIME%] %~1
goto :EOF

الجزء 5: التمرين النهائي​

الخطوة 5.1: سكربت النسخ الاحتياطي​

قم بإنشاء سكربت backup.bat الذي:

  1. يطلب مجلد المصدر
  2. يطلب مجلد الوجهة
  3. ينشئ نسخة احتياطية مع التاريخ في الاسم
  4. يعرض تقريرًا

الحل:

@echo off
setlocal enabledelayedexpansion

echo ============================================
echo SCRIPT DE BACKUP
echo ============================================
echo.

:: Demander les chemins
set /p SOURCE=Dossier source:
set /p DEST=Dossier destination:

:: Verifier les chemins
if not exist "%SOURCE%" (
echo [ERREUR] Le dossier source n'existe pas!
pause
exit /b 1
)

if not exist "%DEST%" (
echo Le dossier destination n'existe pas. Creation...
mkdir "%DEST%"
)

:: Creer le nom du backup avec la date
for /f "tokens=1-3 delims=/" %%a in ("%DATE%") do set DATESTR=%%c%%b%%a
for /f "tokens=1-2 delims=:" %%a in ("%TIME%") do set TIMESTR=%%a%%b
set BACKUP_NAME=backup_%DATESTR%_%TIMESTR%

:: Creer le dossier de backup
set BACKUP_PATH=%DEST%\%BACKUP_NAME%
mkdir "%BACKUP_PATH%"

echo.
echo Backup en cours de %SOURCE% vers %BACKUP_PATH%...
echo.

:: Copier les fichiers
xcopy "%SOURCE%\*" "%BACKUP_PATH%\" /E /I /Y /Q

if %errorlevel%==0 (
echo.
echo [OK] Backup termine avec succes!
echo Destination: %BACKUP_PATH%

:: Compter les fichiers copies
for /f %%a in ('dir /s /b "%BACKUP_PATH%\*" 2^>nul ^| find /c /v ""') do echo Fichiers copies: %%a
) else (
echo [ERREUR] Le backup a echoue!
)

echo.
pause

التسليمات​

  1. السكربتات التي تم إنشاؤها:

    • سكربت التنظيف
    • سكربت معلومات النظام
    • قائمة تفاعلية
    • سكربت النسخ الاحتياطي
  2. لقطات الشاشة:

    • تشغيل كل سكربت
    • نتيجة القائمة التفاعلية
  3. الأسئلة:

    • إجابة السؤال 1
    • اشرح الفرق بين %variable% و !variable!

معايير التقييم​

المعيارالنقاط
سكربتات أساسية20%
هياكل التحكم25%
سكربتات عملية30%
سكربت النسخ الاحتياطي25%

أوامر مرجعية​

:: Variables
set VAR=valeur
set /p VAR=Prompt:
echo %VAR%

:: Conditions
if "%VAR%"=="valeur" (commande)
if exist fichier (commande)
if %errorlevel%==0 (commande)

:: Boucles
for /l %%i in (1,1,10) do commande
for %%f in (*.txt) do commande

:: Fichiers
copy source dest
xcopy source dest /E /I
del fichier
mkdir dossier
rd dossier /s /q

:: Redirection
commande > fichier (ecraser)
commande >> fichier (ajouter)
commande 2>nul (masquer erreurs)

مختبر تم تطويره في إطار دورة أنظمة التشغيل - الوحدة 7