Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Wstępna konfiguracja Windowsa przy pomocy skryptu batch

W poniższym wpisie przedstawiam kilka prostych, aczkolwiek przydatnych przykładów skryptów, które pomogą nieco zautomatyzować proces konfiguracji nowego komputera z Windowsem na pokładzie. W myśl zasady mówiącej, że każda czynność, którą powtarzamy więcej niż raz powinna zostać oskryptowana.

W skrócie, plik batchowy to plik zawierający ciąg poleceń, które jest w stanie wykonać interpreter komend (powłoka) - w przypadku Windowsów od Windows NT wzwyż jest to "cmd.exe". Kolejne komendy w pliku umieszczamy jedna pod drugą i w takiej też kolejności są wykonywane. Plik batchowy powinien mieć rozszerzenie .bat.

Początek skryptu

W pierwszym wierszu warto umieścić:

@echo off

dzięki czemu podczas wykonywania pliku batchowego nie będą wyświetlane na ekranie wybierane polecenia, a jedynie ich rezultat. Może się również okazać pomocne ustawienie strony kodowej:

chcp 1250

co pozwoli nam na korzystanie z polskich znaków. Aczkolwiek nie zawsze warto zawracać sobie tym głowę.

Ustawianie zmiennych środowiskowych TMP oraz TEMP

Do rzeczy. Poniższy fragment skryptu utworzy katalog temp na partycji systemowej, a następnie przypisze na stałe systemowe zmienne środowiskowe TMP oraz TEMP do tego katalogu:

IF NOT EXIST "%SystemDrive%:\temp" ( mkdir %SystemDrive%:\temp ) setx /m TEMP %SystemDrive%\Temp setx /m TMP %SystemDrive%\Temp setx TEMP %SystemDrive%\Temp setx TMP %SystemDrive%\Temp

Zamiast zmiennej %SystemDrive% można śmiało wpisać na sztywno literę partycji systemowej, np.: "C:\temp".

Ukryte pliki, foldery i rozszerzenia plików

Następnie odkrywamy ukryte pliki i katalogi oraz rozszerzenia plików:

REG add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Hidden /t REG_DWORD /d 1 /f REG add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v ShowSuperHidden /t REG_DWORD /d 1 /f REG add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v HideFileExt /t REG_DWORD /d 0 /f

Ponieważ powyższe komendy modyfikują wpisy w rejestrze to zmiany te zostaną uwzględnione dopiero po restarcie systemu.

Zarządzanie kontami

Jeśli po postawieniu Windowsa odblokowaliśmy, domyślnie wyłączone, konto "Administrator", np. za pomocą:

net user administrator /active:yes

to poniższym kodem zmienimy do niego hasło. Co ważne - wpisywane znaki nie będą wyświetlane na ekranie ani nie zostaną zapisane do zewnętrznego pliku:

net user administrator *

Teraz, po zalogowaniu na konto "Administratora", możemy usunąć pierwsze lokalne konto, które zostało utworzone podczas instalacji systemu. Skrypt poprosi o podanie nazwy konta do usunięcia. Prócz tego usunięte zostaną również katalogi uzytkownika:

set /p admin=Podaj nazwe konta do usuniecia: net user %admin% /del rd /s /q c:\users\%admin%

Powyższy kod, przy pomocy "set /p admin" wyświetli po znaku "=" wybrany monit, a następnie przypisze do zmiennej "admin" podaną przez użytkownika nazwę konta, by wykorzystać ją linię niżej.

Hibernacja

Jeśli potrzebujemy ustawić hibernację na komputerze, wystarczy dodać:

powercfg -H ON

Analogicznie, jeśli chcemy wyłączyć hibernację i usunąć plik "hiberfil.sys" po przełączniku "-H" dajemy "OFF".

Zmiana nazwy komputera

Kolejny fragment pozwala nam zmienić wygodnie nazwę komputera. Co ważne zmiana ta wchodzi w życie od razu i nie wymaga restartu. Ponowie korzystamy z "set /p" by odpowiedź użytkownika przypisać do zmiennej:

set /p nowanazwa=Podaj nowa nazwe komputera: wmic computersystem where name="%computername%" call rename name="%nowanazwa%"

Zmiana formatu daty

Zmiana krótkiego formatu daty w systemie na dd-mm-rrrr:

REG add "HKU\.Default\Control Panel\International" /v sShortDate /t REG_SZ /d dd-mm-rrrr /f

Jak w przypadku innych wpisów w rejestrze - zmiana ta wejdzie w życie po restarcie.

Wyłączanie informacji o debugowaniu

Wyłączamy zapisywanie informacji przy debugowaniu:

REG add "HKLM\SYSTEM\ControlSet001\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 0 /f

Kontrola konta użytkownika

A tak można wyłączyć kontrolę konta użytkownika (UAC):

REG add "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v EnableLUA /t REG_DWORD /d 0 /f

Ponownie mamy do czynienia z rejestrem i ponownie zmiana zacznie obowiązywać po restarcie.

Instrukcja skoku: GOTO

Na koniec wspomnę jeszcze o bardzo pomocnej instrukcji skoku: goto. Dzięki niej możemy łatwo przeskakiwać między wybranymi fragmentami kodu. By z niej skorzystać wpierw w kodzie skryptu, definiujemy punkty poprzedzone dwukropkiem, do których będziemy chcieli przeskoczyć:

:unikatowa_nazwa

Teraz aby przeskoczyć do wyżej wymienionego fragmentu piszemy:

goto unikatowa_nazwa

Przykład wykorzystania instrukcji goto:

IF EXIST "C:\temp" goto temp_istnieje mkdir C:\temp :temp_istnieje

Powyższy fragment wpierw sprawdza czy istnieje katalog C:\temp. Jeśli tak to przeskakuje do ":temp_istnieje", a następnie wykonywane są dalsze części skryptu. Jeśli natomiast warunek IF nie jest spełniony wówczas, za pomocą "mkdir C:\temp", utworzony zostaje ww. folder i dopiero po tym wykona się dalsza część skryptu.

Z pliku batchowego zawierającego powyższe komendy sam często korzystałem. Oczywiście istnieje masa ustawień, które można dostosować za pomocą jednego, prostego skryptu. Polecam dalsze drążenie tematu co często zaoszczędzi trochę czasu, a w sytuacjach wymagających szybkiej reakcji - pewnie także i stresu.  

windows porady programowanie

Komentarze

0 nowych
GBM MODERATOR BLOGA  19 #1 07.04.2016 15:46

Hmm... Batch już odchodzi do lamusa na rzecz PowerShella. Chyba właśnie PS byłby lepszy do takiego zadania, zwłaszcza że oferuje obiektowość co może się okazać przydatne ;-)

chmod700   6 #2 07.04.2016 15:49

@GBM: Może i masz rację z tym, że odchodzi do lamusa, a na pewno ma mniejsze możliwości. Jednak skrypt batch, w moim przypadku, uruchamiał się szybciej i dostarczył mi tego co akurat chciałem osiągnąć nieżadko mniejszym nakładem pracy, więc nie było potrzeby zagłębiania się w PS.

Autor edytował komentarz w dniu: 07.04.2016 15:59
kowgli   6 #3 07.04.2016 16:07

@GBM: Zgadzam się z autorem. PowerShell to często strzelanie z armaty do muchy.

AlbatrosZippa   10 #4 07.04.2016 16:32

@GBM W szkolnictwie na kierunku technik informatyk PowerShella nikt nie chcę tykać, bo po co. A najlepsze że ostatnio dostałem PDF i miałem zrobić skrypty *bat, które były dostosowane pod FDD, IBM Lotus Office. Jednak skrypt przerobiłem pod pendrive i MS Office. Jednak skrypty w bat się przydają przy obsłudze komputerów w sali PC np. on/off usługi Windows Audio itd. To w użytku domowym jest w kilku procentach potrzebne

Autor edytował komentarz w dniu: 07.04.2016 16:37
dripix   3 #5 07.04.2016 16:44

@GBM: Czy ja wiem czy tak odchodzi do lamusa? Wiele aplikacji wciąż można używać "via command line" i ułatwia to pracę (wget, aria, 7z, ImageMagick itd...) Pozwala zautomatyzować wiele czynności, właśnie bez wiedzy (np o PowerShell) znajomości skomplikowanej składni - wiele takich narzędzi od razu w internecie ma bardzo rozbudowany dział pomocy i "command line syntax". Właśnie dzięki cmd - nawet taki żółtodziób jak ja - może "oskryptować" sobie pracę na kompie.

Autor edytował komentarz w dniu: 07.04.2016 16:46
bachus   19 #6 07.04.2016 17:18

@dripix: a co mają wspólnego przełączniki programów (wspomniane wget, aria itd.) z intepreterem (cmd)?
@kowgli: nie, to tylko strach przed nowym. Większość starszej daty administratorów Windows jest wyjątkowo uczulonych na linię poleceń - coś, co nie można wyklikać myszką przeraża. Windows 2012 / Azure to już niestety zweryfikował ze względu na to, że chociaż podstawowa znajomość PowerShell jest zwyczajnie niezbędna. Batche (.bat / .cmd) będą jeszcze długo używane, jednak podstawowa znajomość (oczywiście dla kogoś kto się tym zajmuje, nie dla końcowego użytkownika!) jest niezbędna.

Autor edytował komentarz w dniu: 07.04.2016 17:36
Indy   8 #7 07.04.2016 17:21

Fajna byłaby do pobrania paczka z tymi skryptami. Po co każdy ma sobie je przeklejać

Pablo_Wawa   9 #8 07.04.2016 17:46

"Plik batchowy powinien mieć rozszerzenie .bat" - lub .cmd

dripix   3 #9 07.04.2016 17:48

@bachus: Hmm... Pliki .bat/.cmd? - w których oprócz tego można w PROSTY sposób operować na plikach / korzystać z funkcji systemu (tak jak w powyższym wpisie).

Autor edytował komentarz w dniu: 07.04.2016 17:52
bachus   19 #10 07.04.2016 17:53

@dripix: ale to raczej nie ma nic wspólnego z intepreterem poleceń (cmd)? Chyba wszystko jedno czy wykorzystamy batch/cmd/ps do np.
wget "http://www.dobreprogramy.pl" -outfile "plik"

dripix   3 #11 07.04.2016 18:05

@bachus: Może i masz racje, ale nie każdy (np. ja) odnajduje się w skryptach ps. Za to w batch bardzo dobrze. Resztę napisał już wyżej kolega @chmod700.

Autor edytował komentarz w dniu: 07.04.2016 18:06
bachus   19 #12 07.04.2016 18:12

@dripix: oczywiście, że nie masz co się z czymś męczyć, co nie spełnia Twoich oczekiwań - jak uzyskujesz co jest Ci potrzebne w bat/cmd, to pełnia szczęścia :-)

dripix   3 #13 07.04.2016 18:23

@bachus: "Nie ważne w jaki sposób, ważne że cel zostanie osiągnięty". Może i taki ps radził by sobie lepiej** i "zjadłby" moje biedne pliki wsadowe, ale "po co zmieniać coś, co działa" :D Wracając jednak do tematu: Wciąż jeszcze spotykam się ze skryptami bat, które "robią robotę" (np. w firmie, w której pracowałem) więc nie tylko ja tak myślę.

**Jeżeli o mnie chodzi to chętnie nauczyłbym się nawet C++ i javy ale jestem na to za głupi - więc radzę sobie z wykorzystaniem tego, co umiem :D

GBM MODERATOR BLOGA  19 #14 07.04.2016 19:31

Eh, dziwne macie podejscie. Powershell z tego co się orientuje daje grom możliwości w porównaniu do Batcha. Dodatkowo jest bardziej intuicyjny składniowy, wzorowany na Bashu i do tego jest w stanie robić to samo co Batch. Konserwy z Was i tyle ;p

chmod700   6 #15 07.04.2016 20:25

@GBM: Chciałem się z ludźmi podzielić paroma radami, bo może to komuś ułatwić nieco życie, ale w internecie zawsze znajdzie się ktoś komu będzie to przeszkadzać. Wyluzuj.

Autor edytował komentarz w dniu: 07.04.2016 20:31
bachus   19 #16 07.04.2016 21:17

@chmod700: tak z ciekawości, czemu wyłączasz informacje o debugowaniu?

dripix   3 #17 07.04.2016 21:20

@chmod700: Emotka ";p" na końcu wypowiedzi @GBM sugeruję, że wcale nie jest on spięty :D Jestem konserwą (pamiętam czasy DOSa) i mam tego świadomość. GBM ma w sumie rację. Ale póki skrypty batch w Windowsie działają - nie czuję potrzeby nauki PS, tym bardziej, że na co dzień nie pracuję jako administrator. Może kiedyś się go pouczę - jak ktoś napisze dobrą książkę o nim (a może już taka jest?) - ale to bardziej dla sportu :P

Berion   13 #18 07.04.2016 23:45

@GBM: Szkoda że tylko wzorowany. ;) Jak widzę litanie w ps to mnie skręca.

@chmod700: Z tym UAC to chyba miało być na odwrót? ;p

  #19 08.04.2016 07:14

Ja za to mogę dorzucić od siebie instalowanie za pomocą chocolatey z przykładowymi programami:
### wszystko wykonywane z cmd jako admin
# zmiana polityki poweshell
powershell Set-ExecutionPolicy unrestricted

### ponizsze mozna uruchomic ze skryptu poleceniem powershell -file \.ps1
# instalacja chocolatey
iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
# wylacznie potwierdzenia dla instalowanych programow
choco feature enable -n allowGlobalConfirmation
# instalaja programow
choco install flashplayerplugin
choco install javaruntime
choco install dotnet4.5
choco install silverlight
choco install spotify
choco install vlc
choco install firefox
choco install thunderbird
choco install skype
choco install notepadplusplus.install
choco install 7zip.install
choco install totalcommander
choco install adobereader
choco install libreoffice
choco install ccleaner
choco install avastfreeantivirus

#end

###przydatne komendy:
# update całego repo
choco update all
# update konkretnego programu
choco update all
#przeinstalowanie programu
choco install -force avastfreeantivirus
#dostepne programy
choco list
#zainstalowane programy
choco list -localonly
# jest dostepne gui
choco install chocolateygui

jakubm87   3 #20 08.04.2016 07:16

Ja za to mogę dorzucić od siebie instalowanie za pomocą chocolatey z przykładowymi programami:
### wszystko wykonywane z cmd jako admin
# zmiana polityki poweshell
powershell Set-ExecutionPolicy unrestricted

### ponizsze mozna uruchomic ze skryptu poleceniem powershell -file pelna_sciezka
azwa_pilku.ps1
# instalacja chocolatey
iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
# wylacznie potwierdzenia dla instalowanych programow
choco feature enable -n allowGlobalConfirmation
# instalaja programow
choco install flashplayerplugin
choco install javaruntime
choco install dotnet4.5
choco install silverlight
choco install spotify
choco install vlc
choco install firefox
choco install thunderbird
choco install skype
choco install notepadplusplus.install
choco install 7zip.install
choco install totalcommander
choco install adobereader
choco install libreoffice
choco install ccleaner
choco install avastfreeantivirus

#end

###przydatne komendy:
# update całego repo
choco update all
# update konkretnego programu
choco update nazwa_programu
#przeinstalowanie programu
choco install -force nazwa_programu
#dostepne programy
choco list
#zainstalowane programy
choco list -localonly
# jest dostepne gui
choco install chocolateygui

Autor edytował komentarz w dniu: 08.04.2016 07:45
GBM MODERATOR BLOGA  19 #21 08.04.2016 07:58

@chmod700: Ale ja jestem wyluzowany, nie neguje, że napisałeś taki wpis i opisałeś tworzenie skryptu Batchowego. Jedynie wskazuję na to, że są nowe rozwiązania oferujące to samo, a nawet więcej. Zauważ, że większość Czytelników przegląda także komentarze, więc warto też poruszyć taką dyskusję - żeby mieli oni wybór ;)

@dripix No i git, niech każdy pisze sobie w tym co lubi i jest mu najwygodniej. Ja jedynie chciałem wskazać alternatywę, a widzę że niektórzy już się burzą :P

  #22 08.04.2016 08:32

Wyłączanie UAC nie jest zbyt mądre. Po coś to jest jednak :-)
A sam mechanizm nie jest zbyt upierdliwy. Ktoś powie- no tak instaluję dużo programów i muszę dużo klikać- tym bardziej powinieneś mieć UAC włączony. Prosta zasada: im więcej instalujesz tym większa szansa, że zainstalujesz sobie jakieś gówno, które narobi ci w kompie kosmiczny syf.

chmod700   6 #23 08.04.2016 08:38

@GBM: Ok, wybacz, zwracam honor:) Po prostu odebrałem to trochę jak PowerShell-Master-Race:) Również uważam, że im więcej możliwości zrobienia czegoś tym lepiej.

@Berion: czyżby?:P

@bachus: #ZapewneNiepopularnaOpinia - nie było nigdy czasu żeby to analizować. Zresztą wsparcie sprzętu zakładało, że cała diagnostyka, która jest potrzebna może być wykonana z poziomu biosu.

@jakubm87: Dzięki, zapiszę sobie i prędzej czy później pewnie się przyda.

Autor edytował komentarz w dniu: 08.04.2016 09:11
  #24 08.04.2016 13:38

@GBM: pogieło chyba kogoś. W ramach scisłosci nie ma takiego czegos jak Batch za to jest bash. Mało tego, nie po to M$ wprowadza niebawem wlaśnie basha jako dodatkowa powłoka.

chmod700   6 #25 08.04.2016 16:19

@Anonim (niezalogowany): słaby trolling:)

Berion   13 #26 08.04.2016 17:17

@chmod700: Wyłączanie UAC to kiepski pomysł. Spodziewałbym się w skrypcie zwiększenie jego upierdliwości. Spodziewałbym się też dodania linijek pokazujących PIF/LNK/URL, wyłączenia bezużytecznego monitu dla Explorera proponującego przeszukiwanie sieci w poszukiwaniu programu do otwarcia nieprzypisanego rozszerzenia. W ogóle omówienia przełączników, tak zacznijmy od tego. ;)

@Anonim (niezalogowany): Lepiej już nic więcej nie pij. :P

@jakubm87: Powiedz mi, jako użytkownik czekolady, czy nie boisz się tego, że paczki są przez kogoś przygotowywane (i tym ktosiem nie jest autor oprogramowania, które instalujesz)? ;)

Większość instalatorów posiada parametry dla tzw. instalacji nienadzorowanej, więc osobiście nie widzę sensu w podejmowaniu takiego ryzyka.

Autor edytował komentarz w dniu: 08.04.2016 17:23
jakubm87   3 #27 08.04.2016 18:23

@Berion: Choco to repo rozproszone, ze zbiorem skryptów do instalowania przeważnie ze strony producenta. Pakiet zawiera na ogół skrypty, które są wykonywane podczas instalacji/usuwania programu.Np:
https://chocolatey.org/packages/ccleaner
Zawiera skrypty: Install.ps1, Uninstall.ps1, regAdd.ps1.
Możesz rzucić okiem na to co się dzieje. Wprawdzie wolałbym basha, ale nie wybrzydzam.;)

mktos   9 #28 09.04.2016 10:34

@Berion: Choco ma moderację paczek, poza tym każdy skrypt jesteś w stanie sobie zobaczyć... i zazwyczaj polega właśnie na odpaleniu instalacji nienadzorowanej.

Tylko plus jest taki, że nie musisz ani znać parametrów do jej odpalenia ani szukać instalatorów.

Berion   13 #29 09.04.2016 12:45

@mktos/@jakubm87: Ok, widzę że nie zrozumiałem czym jest czekolada. Dotychczas myślałem, że opiekunowie repozytorium wrzucają tam przepakowane instalatory. W takim razie to bardzo fajne narzędzie. :)

ajp.c0.pl   5 #30 11.04.2016 11:09

Ja do dyskusji o PS dodam że u mnie w firmie jest wyłączona możliwość uruchamiania skryptów w PS. Z tego co kiedyś czytałem to są trzy albo cztery poziomy zabezpieczeń i jeden z nich pozwala na klejenie poleceń ale nie uruchamianie skryptów :P Także bash prawie zawsze pójdzie :)

Prawie zawsze ponieważ zdążyło mi się że podczas pisania skryptu użyłem funkcji która w W7 była a XP już nie miało :( Na szczęście wystarczyło dołożyć plik i wskazać miejsce :D