[ Doomhammer @ 21.06.2011. 10:40 ] @
Pozdrav,

Pokušavam da automatizujem jedan dosadan posao koji treba da se odradi svaki dan ali ne pada mi na pamet način na koji da to izvedem. Plan je napraviti .bat ili .cmd skriptu koja bi se izvršavala na Win Server 2003. Situacija je slijedeća. Imam Folder_A i u njemu određen broj foldera (1...6) u svakom od tih foldera imam po 10 fajlova koji se kreiraju svaki dan (backup). Nazivi tih fajlova su djelimično random (backup_13182937.bak). U Folder_B imam identičnu strukturu foldera (1...6) i u te foldere treba da prebacim fajlove iz Folder_A koji su kreirani recimo danas, usput u Folderu_B treba da obrišem fajlove koji su prebačeni juče. Tako da na kraju poslije izvršenja skripte u Folder_B treba da bude samo po jedna kopija (najnovija). Valjda sam dobro objasnio problem, a tu je i neka ilustracija strukture foldera.

Folder_A
|--folder1 --- (fajl1, fajl2, fajl3... fajl10)
|--folder2 --- (fajl1, fajl2, fajl3... fajl10)
|--folder3 --- (fajl1, fajl2, fajl3... fajl10)
|--folder4 --- (fajl1, fajl2, fajl3... fajl10)
|--folder5 --- (fajl1, fajl2, fajl3... fajl10)
|--folder6 --- (fajl1, fajl2, fajl3... fajl10)

Folder_B
|--folder1 --- (fajl10)
|--folder2 --- (fajl10)
|--folder3 --- (fajl10)
|--folder4 --- (fajl10)
|--folder5 --- (fajl10)
|--folder6 --- (fajl10)

Neka ideja je da je prvi korak koji skripta radi taj da ide rekurzivno po folderima unutar Folder_B i briše sve fajlove (ne foldere). Nakon toga skripta bi trebalo da ide kroz foldere unutar Folder_A i upoređuje datum kreiranja fajla sa sistemskim datumom (datum kada je skripta pokrenuta) te da kopira fajl kod kojeg se utvrdi da je istog datuma u određeni folder unutar Folder_B. Da li je ovo ispravan način funkcionisanja skripte, te da li imate neku ideju koja bi pojednostavila korake? Dalje, ima li ko ideju kako ovakvu skriptu napisati? Da ne ispane da tražim nešto gotovo, cijenim i ako neko ima link ka nekom tekstu ili objašnjenju...

[ X Files @ 21.06.2011. 10:51 ] @
Za početak pogledaj ovde, drugi deo skripte:
http://www.elitesecurity.org/p1622527

Tu možeš steći neku sliku kako se "formira" ciljna putanja fajla/foldera, i i kako se može vršiti brisanje.
[ Doomhammer @ 22.06.2011. 13:18 ] @
Hvala.
Na osnovu linka i jos nekog teksta napisao sam slijdece
Code:
@Echo off
for /f "tokens=1-3 delims=. " %%g in ('date /t') do (
set dan=%%g
set mjesec=%%h
set godina=%%i
)
cd Folder_B
D:
del /S /F *.bak
cd "Folder_A"
pause
: Problem
for /f "tokens=1 delims=" %%A in ('dir /b') do (
set ime_foldera=%%A
set ime_foldera
copy \%ime_foldera%\*%godina%_%mjesec%_%dan%_*.bak \Folder_B\%ime_foldera%\
)
pause


E sad imam problem posto ovo ne radi, a ja ne kontam zašto. Sve do labele Problem radi kako bi i trebalo i to mi je jasno. Problem se javlja u drugoj FOR petlji.
Ideja je slijedeća:
komanda "dir /b" ispiše foldere unutar trenutnog foldera, u ovom slučaju unutar Folder_A.
Pri prvom prolazu kroz petlju trebalo bi da radi slijedeće:
1. promjenljivoj "ime_foldera" da dodijeli kao vrijednost naziv prvog foldera unutar Folder_A
2. komanda set ime_foldera je tu da mogu da pratim da li se dodjeljuje pravi naziv tokom izvršavanja
3. kopira fajl iz foldera u folder gdje su imena foldera određena vrijednošću promjenljive "ime_foldera", a naziv fajla određen datumom koji se na početku definiše

Koliko sam vidio problem je u trećem koraku. Pri izvršavanju batcha i prozoru command prompta piše
Code:
ime_foldera=folder1
\\*2011_06_22_*.bak
The filename, directory name, or volume label syntax is incorrect.
        0 file(s) copied.
ime_foldera=folder2
\\*2011_06_22_*.bak
The filename, directory name, or volume label syntax is incorrect.
        0 file(s) copied.
ime_foldera=folder3
\\*2011_06_22_*.bak
The filename, directory name, or volume label syntax is incorrect.
        0 file(s) copied.
ime_foldera=folder4
\\*2011_06_22_*.bak
The filename, directory name, or volume label syntax is incorrect.
        0 file(s) copied.
ime_foldera=folder5
\\*2011_06_22_*.bak
The filename, directory name, or volume label syntax is incorrect.
        0 file(s) copied.
ime_foldera=folder6
\\*2011_06_22_*.bak
The filename, directory name, or volume label syntax is incorrect.
        0 file(s) copied.


Ovo se pojavi nakon labele Problem u kodu iznad, dakle u drugoj FOR petlji. Koliko ja vidim između \\ fali vrijednost promjenljive ime_foldera... Ima li neko ideju gdje griješim?