CMD (Win 7) - kopiowanie nieistiniejących plików w miejscu docelowym z źródła.

Dodano: 2010-09-25

Chcąc usprawnić tworzenie kopi danych warto wykorzystać możliwości języka skryptowego systemów Microsoft jakie daje narzędzie CMD (może nie jest on przyjemny na pierwszy rzut oka, ale za to bardzo użyteczny ;). W przypadku posiadania wielu plików w jednym folderze np.: zdjęcia, filmy lub też utwory muzyczne warto co pewien czas wykonać ich kopię bezpieczeństwa.

Ciągłe kopiowanie wszystkich plików może być zadaniem czasochłonnym (zawsze jednak można iść na kawę, dobra dwie, jeszcze się kopiuje to zrobię sobie chyba już w termosie) i w przypadku działań w sieci lokalnej może przyczynić się do znacznego obciążenia łącza sieciowego (kto znów kopije pliki, jak go dorwę to wszystkie RJ-otki mu powyłamuję ;).

Jeżeli wykonujecie kopię bezpieczeństwa dużej ilości plików zgromadzonych w jednym folderze, oraz nie modyfikujecie już istniejących tylko dodajecie nowe to warto skorzystać z poniższego skryptu.

Skrypt ten przyjmuję dwa parametry źródło z skąd mają być kopiowane dane oraz cel ich kopiowania, powstał on głównie w celu przenoszenia danych w sieci lokalnej między stacjami roboczymi a serwerem backupu (torchę został zmodyfikowany ;).

Nie wykonuj backapu plików, którego źródło zawiera pod foldery, ponieważ elementy z nich zostaną skopiowane bezpośrednio do miejsca docelowego, bez odtworzenia hierarchii folderów.

Drukuj Zaznacz kod
@echo off
setLocal EnableDelayedExpansion 
cls

@echo Skrypt ten kopiuje pliku niewystepujace w folderze "cel" z miejsca "zrodlo"

set findEXE=%windir%\system32\find.exe


if exist scStruct.txt del /Q scStruct.txt
for /f "delims=" %%a in ('dir %1 /s/a/b ^| %findEXE% /I "."') do (   
	@echo Zrodlo: %%~a 
	@echo %%~a >> scStruct.txt
)  

if exist targetStruct.txt del /Q targetStruct.txt
for /f "delims=" %%a in ('dir %2 /s/a/b ^| %findEXE% "."') do (   
	@echo Cel: %%~nxa
	@echo %%~nxa >> targetStruct.txt
)  


if exist fileNotExist.txt del /Q fileNotExist.txt
for /F "delims=" %%i in (scStruct.txt) do ( 
	set break=0
	set fileSc=%%~nxi
	for /F "delims=" %%j in (targetStruct.txt) do (
		set fileTg=%%j
		set fileTg=!fileTg:~0,-1!
		if !fileSc!==!fileTg! (
			set break=1
		)
	)
	
	if !break!==0 (
		@echo Plik nie istnieje: %%i
			@echo %%i >> fileNotExist.txt
	)
)

if exist fileNotExist.txt (
	for /F "delims=" %%i in (fileNotExist.txt) do (
		echo F|xcopy /Y /I %%i %2%%~nxi
	)
) else (
	@echo Nie ma zadnych nowych plikow do skopiowania.
)

:EXIT

Życzę miłej modyfikacji w zależności do sowich potrzeb ;)