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.
No responses yet. You could be the first!