Kopiowanie plików na pendrajwy…

28 maj 2010

… czyli pożytek z Batcha. Ostatnio w pracy moja dziewczyna narzeczona dostała zadanie skopiowania tego samego zestawu plików na 1500 pendrivów – zadanie nieprzyjemnie odmóżdżające i powtarzalne. Żeby chociaż trochę ułatwić/uprzyjemnić jej to zadanie postanowiłem napisać prosty skrypt automatyzujący wszystko poza podłączaniem pendrivów do komputera ;). Zrobienie tego np w bashu nie powinno sprawić nikomu dużego problemu, ale jako że w korporacjach zazwyczaj używa się windowsów, a nie chciałbym zmuszać wszystkich którzy spotkali się z tym problemem np. do instalowania cygwina napisałem następujący plik .bat:

@echo off
::nie spiesz, nie zrob sobie krzywdy i ustaw odpowiednie katalogi:
 ::jezeli wszystko juz jest przemyslane, wykomentuj nastepna linijke ;)
 exit
::ZAWARTOSC tego katalogu, a nie sam katalog zostanie skopiowany
 set zrodlowy=D:\test\src
::lista docelowych katalogow
 ::UWAGA: ICH ZAWARTOSC (jezeli tak ustawisz zmienna 'usuwaj') ZOSTANIE BEZLITOSNIE USUNIETA!!!
 :: czyli: NIE WPISZ TAM PRZYPADKIEM NAZWY SWOJEGO UZYWANEGO DYSKU
 set docelowe=(G:\, F:\)
:: 0 albo 1 w zaleznosci od tego, czy mamy na wszelki wypadek usuwac zawartosc
 set usuwaj=1
if not exist %zrodlowy% (
 echo ## katalog zrodlowy nie istnieje
 ) else (
 echo OO przystepuje do kopiowania plikow
 echo _
 for %%i in %docelowe% do (
 if not exist %%i (
 echo ## katalog %%i nie istnieje, pomijam
 ) else (
 if "%usuwaj%"=="0" goto BEZ_USUWANIA
 echo OO katalog %%i istnieje, przystepuje do dzialania
 del /S /F /Q "%%i"
 for /f "tokens=* delims=" %%j in ('dir /b /a:d %%i') do (
 rd /S /Q "%%i%%j"
 )
 :BEZ_USUWANIA
 echo _
 echo OO zaczynam kopiowac
 xcopy /E /Y /Z %zrodlowy% "%%i"
 )
 echo _
 )
 )

Jeśli nie mamy pewności, że np docelowy pendrive jest pusty mamy opcję usunięcia jego całej zawartości. Wprawne oko dostrzeże, że skrypt będzie się wysypywał na usuwaniu podkatalogów jeśli katalog docelowy ma spacje w ścieżce, ale poprawienie tego nie było w moim przypadku potrzebne i wydaje mi się sztuką dla sztuki :) Mam nadzieję, że jeszcze komuś się przyda to rozwiązanie.

Podobnie Batch przydaje się np do _włączania_ i _wyłączania_ VMWare Serverwa (jego wszystkich usług) w zależności od tego, czy go w danej chwili potrzebujemy czy nie, ale odkąd mamy do dyspozycji prostszego w użyciu i mniej zasobożernego VMWare Playera nie jest to takie przydatne.

Jacek Królikowski


No responses yet. You could be the first!

Leave a Response

Recent Posts

Tag Cloud

Agile autotematyczne bash batch c++ CMake Debian film poklatkowy GNU Octave Google google test grafika Java MIM UW screencast tapeta TDD uczenie maszynowe webcam

Meta

Almost Done

Copyright © Almost Done