Postat la
10-Feb-2009
ora
11:32 pm
de
[Chetroesu]
Iterarea fisierelor dintr-o structura de directoare este o chestiune care de multe ori, in proiectele la care am lucrat, s-a dovedit a fi necesara. Scriptul prezentat in acest articol rezolva aceasta problema intr-un mod simplu. Bineinteles ca functie de destinatia dorita, acest script se poate extinde intr-un fel sau altul.
Rezolvarea mea este prezentata in codul urmator. Copiati scriptul intr-un fisier shell: file_list.bat. Fisierul listeaza toate fisierele pe care le gaseste in directorul curent. Scriptul se poate extinde prin transmiterea folderului care se doreste a fi parcurs ca si parametru in linia de comanda pentru fisierul shell.
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
REM initializam folderul root cu valoarea folderului curent. valoarea poate fi luata si din parametrii scriptului
SET FOLDER_TO_ITERATE=%cd%
REM setam path-ul curent, directorul root de iterat
CD !FOLDER_TO_ITERATE!
REM Iteram structura de directoare
FOR /R . %%A IN (.) DO (
REM initializam counter-ul de fisiere dintr-un subdirector.
SET COUNT=0
REM Iteram subdirectorul curent,contorizand fisierele si retinand ultimele nume, extensie si path.
FOR %%B IN ("%%~A"\*.*) DO (
SET /A COUNT+=1
SET FileName=%%~nB
SET FileExtension=%%~xB
SET FilePath=%%~dB%%~pB
)
REM Daca am gasit un singur fisier.
IF !COUNT! EQU 1 (
ECHO Fisier: !FilePath!!FileName!!FileExtension!
)
REM Daca au fost gasite mai multe fisiere, re-iteram fisierele din subfolder.
IF !COUNT! GTR 1 (
SET COUNT=0
FOR %%B IN ("%%~A"\*.*) DO (
SET /A COUNT+=1
REM scoatem intr-o variabila numele fisierului
SET FOUND_FILE="%%~dB%%~pB%%~nB%%~xB"
ECHO Fisier !COUNT!: !FOUND_FILE!
)
)
)
Acestea fiind zise, putem sterge toate fisierele dintr-un folder, putem redenumi, dupica, muta... etc.
Un studiu de caz, il puteti gasi citind articolul Stampilarea imaginilor: watermark.