Friday, August 20, 2010 11:25 AM levaja

Batch scripting: Reimenovanje fajlova u poddirektorijumima

Pozdrav svima.

Imao sam danas potrebu da reimenujem  veći broj fajlova (zapravo da dodam ekstenziju) koji se nalaze u 40-tak poddirektorijuma, iz ekstenzije .module u .php. Pošto je lenjost u mom slučaju majka svih skriptova, iako bi mi bilo 2x brže da sam to uradio ručno, pokušao sam da stvar ipak izguram kroz skript (i to batch, ne python, osećam se mazohistički od jutros ;) ).

Struktura izgleda ovako:

<snip>

Directory of D:\Downloads\drupal-5.5\modules\system

20-Aug-10  11:10    <DIR>          .
20-Aug-10  11:10    <DIR>          ..
23-Nov-06  13:05             1,686 admin.css
25-Aug-06  11:01               737 defaults.css
21-Dec-06  18:13             6,932 system.css
06-Dec-07  22:30               311 system.info
07-Nov-07  07:53           126,680 system.install
06-Dec-07  22:23            94,610 system.module
               6 File(s)        230,956 bytes

Directory of D:\Downloads\drupal-5.5\modules\taxonomy

20-Aug-10  11:10    <DIR>          .
20-Aug-10  11:10    <DIR>          ..
06-Dec-07  22:30               299 taxonomy.info
06-Dec-07  20:16            55,791 taxonomy.module
               2 File(s)         56,090 bytes

Directory of D:\Downloads\drupal-5.5\modules\throttle

20-Aug-10  11:10    <DIR>          .
20-Aug-10  11:10    <DIR>          ..
06-Dec-07  22:30               327 throttle.info
20-Dec-06  12:29             9,071 throttle.module
               2 File(s)          9,398 bytes

 

</snip>

 

Pošto mi posao savršeno završava dodavanje .php na postojeću .module ekstenziju (npr. throttle.module => throttle.module.php), rešenje bi izgledalo ovako:

for /F "tokens=1" %i in ('dir /b /s ^| findstr /E "module"') do move %i %i.php

Objašnjenje:

Petlja FOR sa svičem /F trči kroz izlaz komande iz zagrade i reimenuje, odnosno prebacuje fajl iz jedne ekstenzije u drugu. MOVE komanda je korišćena umesto REN zbog jednostavnije sintakse. Zapravo ne znam kako bih u jednoj liniji rešio problem sa REN….možda ugnježdavanjem FOR unutar FOR….to su već suicidalne tendencije….

DIR /B /S lista u “golom” formatu (/b) sve poddirektorijume (/s). Izlaz se preusmerava u ulaz FINDSTR komande (mlađi brat GREP komande ;) ), pri čemu je svič /E ključan jer traži reč “module” na kraju stringa a ne bilo gde. U suprotnom, pošto sama putanja do fajla takodje sadrži reč “module”, izlaz komande bi bio neželjen jer bi nam izlistao sve fajlove.  Komande u zagradi su pod jednostrukim navodnicima, koji rade otprilike isto što i backticks na linuxu, a sam pipe ( | ) je eskejpovan sa ( ^ ) inače bi usledila poruka o grešci. Na kraju, MOVE prebacuje fajl u željenu ekstenziju.

 

 

Pozz!

# re: Batch scripting: Reimenovanje fajlova u poddirektorijumima

Tuesday, August 24, 2010 10:31 AM by M.Milivojevic

ja sam koristio neshto slicho, samo shto sam imao potrebu za brisanjem file-ova starijih od x dana:

forfiles /p D:\folder\ /s /m *.7z /s /c "cmd /c del @file" /d -14

Leave a Comment

(required) 
(required) 
(optional)
(required) 
Are you a human?