Laboratorium CMD/BAT – Zadania praktyczne

Poniżej znajduje się 10 zadań laboratoryjnych z zakresu programowania w powłoce CMD systemu Windows. Każde zadanie jest zaprojektowane tak, aby wymagało około 25-30 minut. Zadania obejmują różne tematy poznane na wykładzie, od podstaw tworzenia skryptów wsadowych, przez pracę ze zmiennymi i argumentami, instrukcje warunkowe i pętle, aż po zaawansowane przetwarzanie plików i zarządzanie systemem.

Zadanie 1: System rejestracji użytkowników

Cel: Student stworzy interaktywny skrypt rejestrujący nowych użytkowników systemu. Skrypt ma pobierać dane od użytkownika (login, imię, nazwisko, dział), zapisywać je do pliku CSV oraz walidować poprawność wprowadzonych danych przed zapisem. Dodatkowo skrypt ma sprawdzać, czy dany login już istnieje w rejestrze.
Scenariusz: W firmie IT Solutions potrzebny jest prosty system rejestracji nowych pracowników. Dział HR chce mieć możliwość szybkiego dodawania nowych osób do systemu bez konieczności ręcznej edycji plików. Skrypt ma uruchamiać się w trybie interaktywnym, pobierać od administratora kolejno: login (unikalny identyfikator), imię, nazwisko oraz nazwę działu organizacyjnego. Przed zapisem skrypt ma sprawdzać, czy login nie jest już zajęty oraz czy żadne pole nie zostało puste. Po udanym zapisie ma wyświetlać podsumowanie dodanego użytkownika. System ma być wielokrotnego użytku i działać poprawnie przy wielokrotnych uruchomieniach.
Wskazówki do wykonania:

Zadanie 2: Analizator struktury katalogów

Cel: Student stworzy skrypt rekurencyjnie przeszukujący podaną strukturę katalogów i generujący szczegółowy raport zawierający liczbę plików według typów (rozszerzeń), całkowity rozmiar plików oraz listę największych plików. Skrypt ma akceptować ścieżkę jako argument lub pytać o nią interaktywnie.
Scenariusz: Administrator systemu w firmie MegaCorp potrzebuje narzędzia do szybkiej analizy zajętości dysku na serwerach plikowych. Pojawia się problem, że menedżerowie działów regularnie zgłaszają, że "kończy się miejsce", ale nikt nie wie, które foldery zajmują najwięcej. Zadaniem studenta jest stworzenie skryptu, który przeanalizuje wskazany katalog, podsumuje rozmiar plików według rozszerzeń (np. ile zajmują pliki .pdf, .docx, .jpg), wyliczy dziesięć największych plików oraz obliczy całkowitą liczbę plików i katalogów. Raport ma być zapisany do pliku z znacznikiem czasu w nazwie.
Wskazówki do wykonania:

Zadanie 3: Kalkulator z obsługą błędów

Cel: Student stworzy skrypt kalkulatora przyjmujący dwa argumenty liczbowe oraz operator (dodawanie, odejmowanie, mnożenie, dzielenie, modulo) i zwracający wynik. Skrypt ma obsługiwać błędy: niepoprawna liczba argumentów, nieprawidłowe typy danych oraz dzielenie przez zero.
Scenariusz: Zespół deweloperów w firmie potrzebuje prostego narzędzia do wykonywania obliczeń z poziomu skryptów automatyzujących. Często w pipeline'ach CI/CD potrzebne jest wykonanie prostych operacji matematycznych na liczbach całkowitych. Zadaniem studenta jest stworzenie skryptu kalkulatora, który jako argumenty przyjmie dwie liczby oraz operator w formie znakowej (+, -, *, /, % dla modulo). Skrypt ma walidować argumenty, wykonywać obliczenia i zwracać wynik z odpowiednim kodem powrotu (exit code). W przypadku błędu skrypt ma wyświetlać czytelny komunikat i zwracać kod błędu > 0.
Wskazówki do wykonania:

Zadanie 4: Backup rotator z czyszczeniem starych kopii

Cel: Student stworzy skrypt tworzący kopię zapasową wskazanego katalogu lub pliku, z automatycznym znacznikiem czasu w nazwie. Skrypt ma dodatkowo zarządzać retention policy - automatycznie usuwać kopie starsze niż N dni. Całość ma być gotowa do użycia w harmonogramie zadań Windows.
Scenariusz: Dział IT w firmie LogiTrans potrzebuje automatycznego systemu backupu dla folderów projektowych. Wymagania są następujące: codziennie o godzinie 2:00 w nocy ma być tworzona kopia zapasowa folderu C:\Projekty. Kopie mają być przechowywane na innym dysku (D:\Backup). Każda kopia ma mieć w nazwie datę i godzinę utworzenia. Maksymalnie ma być przechowywanych 7 kopii - starsze mają być automatycznie usuwane. Skrypt ma być odporny na błędy (brak dostępu, brak miejsca) i logować swoje działania do pliku. Skrypt ma akceptować katalog źródłowy i docelowy jako argumenty, z wartościami domyślnymi dla typowych konfiguracji.
Wskazówki do wykonania:

Zadanie 5: Parser plików konfiguracyjnych INI

Cel: Student stworzy skrypt parsujący pliki konfiguracyjne w formacie INI (sekcje w nawiasach kwadratowych, klucz=wartość) i udostępniający wartości wybranych kluczy jako zmienne środowiskowe lub wyświetlający je na ekranie. Skrypt ma obsługiwać sekcje, komentarze i różne formaty wartości.
Scenariusz: Zespół DevOps w firmie potrzebuje jednolitego sposobu odczytu konfiguracji z plików INI używanych przez różne aplikacje. Aktualnie każdy skrypt ma własną logikę parsowania, co prowadzi do błędów i duplikacji kodu. Zadaniem studenta jest stworzenie uniwersalnego parsera INI, który jako argument przyjmie ścieżkę do pliku .ini oraz nazwę sekcji i klucza do odczytania. Skrypt ma zwracać wartość klucza lub listę wszystkich kluczy w sekcji. Pliki INI mogą zawierać komentarze (# lub ;), puste linie, różne separatory (= lub :) oraz wielowartościowe klucze. Parser ma być na tyle elastyczny, by działał z dowolnym poprawnie sformatowanym plikiem INI.
Wskazówki do wykonania:

Zadanie 6: Generator haseł jednorazowych

Cel: Student stworzy skrypt generujący bezpieczne hasła jednorazowe o określonej długości i złożoności. Hasła mają zawierać wielkie i małe litery, cyfry oraz opcjonalnie znaki specjalne. Skrypt ma oferować tryb interaktywny z menu wyboru parametrów.
Scenariusz: Dział bezpieczeństwa IT w firmie SecureBank potrzebuje narzędzia do generowania tymczasowych haseł dla użytkowników, którzy zgubili lub zapomnieli swoje hasło. Hasła muszą spełniać politykę bezpieczeństwa firmy: minimum 12 znaków, co najmniej jedna wielka litera, jedna mała litera, jedna cyfra. Opcjonalnie hasła mogą zawierać znaki specjalne (@#$%&). Skrypt ma uruchamiać się w trybie interaktywnym z menu pozwalającym wybrać długość hasła (8-32 znaków) oraz czy mają być używane znaki specjalne. Po wygenerowaniu hasła skrypt ma je wyświetlać i oferować opcję wygenerowania nowego lub zakończenia. Hasła są wyświetlane tylko raz i nigdy nie są zapisywane do pliku.
Wskazówki do wykonania:

Zadanie 7: Monitor zajętości dysku z alertami

Cel: Student stworzy skrypt monitorujący zajętość określonych dysków logicznych i generujący raport lub alert, gdy zajętość przekracza zadany próg. Skrypt ma akceptować listę dysków do sprawdzenia oraz próg procentowy jako argumenty, domyślnie sprawdzać dysk systemowy przy progu 90%.
Scenariusz: Zespół ops w firmie DataCenter potrzebuje automatycznego monitoringu zajętości dysków na wszystkich serwerach. Obecnie administratorzy dowiadują się o pełnych dyskach dopiero gdy aplikacje zaczynają się zatrzymywać. Zadaniem studenta jest stworzenie skryptu, który sprawdzi podane dyski (np. C:, D:, E:), obliczy procent ich zajętości na podstawie wartości dostępnych w PowerShell, wygeneruje czytelny raport ASCII z paskami wizualizującymi zajętość, oraz w przypadku przekroczenia progu wyświetli alert (komunikat na czerwono lub żółto). Skrypt ma być gotowy do uruchomienia jako zadanie cron lub Task Scheduler. Raport ma być też zapisywany do pliku z datą.
Wskazówki do wykonania:

Zadanie 8: Wsadowa konwersja kodowania plików tekstowych

Cel: Student stworzy skrypt wsadowo konwertujący pliki tekstowe z jednego kodowania znaków (np. UTF-8, ANSI) na drugie. Skrypt ma rekurencyjnie przeszukiwać katalog źródłowy, filtrować pliki po rozszerzeniu i tworzyć przekonwertowane kopie w katalogu docelowym zachowując strukturę katalogów.
Scenariusz: W firmie poligraficznej PrintMax używane są stare pliki szablonów w kodowaniu ANSI (Windows-1250), ale nowe systemy CMS wymagają plików w UTF-8. Zadaniem studenta jest stworzenie skryptu, który automatycznie przekonwertuje wszystkie pliki .txt i .html z katalogu źródłowego, zachowując strukturę podkatalogów w katalogu docelowym. Skrypt ma opcję filtrowania po rozszerzeniu (domyślnie .txt, .html) i obsługiwać kodowania: ANSI (CP1250), UTF-8, UTF-16. Ponieważ CMD nie ma natywnej obsługi konwersji kodowania, skrypt ma używać PowerShell jako silnika konwertującego (wywoływanego przez powershell -Command). Raport konwersji ma zawierać liczbę przekonwertowanych plików i ewentualne błędy.
Wskazówki do wykonania:

Zadanie 9: Automatyczna dokumentacja folderu

Cel: Student stworzy skrypt generujący czytelną dokumentację struktury katalogów w formacie Markdown (.md). Dokumentacja ma zawierać drzewo katalogów z plikami, ich rozmiar, datę modyfikacji oraz opcjonalny opis wygenerowany na podstawie pliku README.md znalezionego w podkatalogach.
Scenariusz: Zespół projektowy w firmie DevTeam potrzebuje automatycznie generowanej dokumentacji projektów przechowywanych na wspólnym dysku sieciowym. Dokumentacja ma być w formacie Markdown, który można łatwo wyświetlać w GitHub, GitLab lub specjalnych przeglądarkach. Zadaniem studenta jest stworzenie skryptu, który dla podanego katalogu głównego wygeneruje plik README.md zawierający: nagłówek z nazwą projektu i datą, spis treści z linkami do sekcji, drzewo katalogów z oznaczeniami, listę plików z rozmiarem i datą, opcjonalne opisy z plików README.md znalezionych w podkatalogach. Skrypt ma być łatwy do uruchomienia z Eksploratora lub z wiersza poleceń.
Wskazówki do wykonania:

Zadanie 10: Menedżer zadań systemowych

Cel: Student stworzy interaktywny menedżer zadań systemowych pozwalający na zarządzanie zaplanowanymi zadaniami Windows: listowanie, tworzenie, usuwanie i włączanie/wyłączanie zadań. Skrypt ma oferować menu tekstowe z numerowanymi opcjami i wyświetlać wyniki w czytelnej formie.
Scenariusz: Administrator systemów w firmie SysAdmin Corp potrzebuje prostego narzędzia do zarządzania zaplanowanymi zadaniami (Task Scheduler) bez konieczności używania graficznego interfejsu lub zapamiętywania składni schtasks. Zadaniem studenta jest stworzenie skryptu oferującego menu z następującymi opcjami: (1) Lista wszystkich zadań z podsumowaniem, (2) Szczegóły wybranego zadania, (3) Utwórz nowe zadanie z podstawowymi parametrami, (4) Usuń zadanie, (5) Włącz/wyłącz zadanie, (6) Historia uruchomień wybranego zadania. Skrypt ma być bezpieczny - wymagać potwierdzenia przed usuwaniem lub wyłączaniem zadań. Wyniki poleceń systemowych mają być filtrowane i formatowane dla czytelności.
Wskazówki do wykonania:

Przykładowe rozwiązania

Skrypty Windows (bat/cmd)