Batchkommando för att radera vissa mappar i ett filträd

Avdelningen för programmering, nätverk samt alternativa OS.
Post Reply
Dand
Posts: 52
Joined: 2005-04-24 17:23:56
Location: Småland/Stockholm

Batchkommando för att radera vissa mappar i ett filträd

Post by Dand »

Hej!
Är minst sagt nybörjare på det här med att göra kommandofiler typ .cmd eller .bat. Sitter i Windows och vill kunna radera alla mappar som heter "[SpecifiktNamn]" (ja, filnamnet börjar och slutar med hakparenteser) i ett filträd. Det är fråga om ett större antal dolda mappar som kan ligga lite var stans i hierarkin under en huvudmapp och de ska raderas med allt sitt innehåll.

Jag har kommit så långt att jag kan radera en enskild mapp om jag bara vet var den finns i filträdet med "rd":

rd c:\Testmapp\[SpecifiktNamn] /s/q

Men problemet är att jag inte vet var i filträdet mapparna med just detta specifika namn finns. Det kan vara var som helst under huvudmappen (i detta fall "Testmapp").

Det hade varit ypperligt om jag hade kunnat använda wildcards i pathen men det tror jag inte fungerar. Så jag funderar på om jag kan lista filträdet i en textfil som jag sedan läser in och analyserar. För att lista med "tree" behöver jag göra alla dessa dolda mappar synliga och det kan jag med "attrib":

attrib -h c:\Testmapp\[SpecifiktNamn] /s /d

Och "attrib" är vänlig nog att gräva sig ner i filträdet och göra alla dolda [SpecifiktNamn] synliga... Så sen kan jag lista filträdet och spara det i en textfil:

tree c:\Testmappt /a > c:\Testmapp\tree.txt

So far so good... Men nu skulle jag vilja hämta in den här textfilen analysera den och få ut alla sökvägar till alla mappar med namnet "[SpecifiktNamn] " och radera dem med innehåll och allt i ett enda svep.

1. Kan jag göra det? Hur i så fall?
2. Finns det något mycket bättre sätt? Det skulle jag ju tro att det gör...
Dand
Posts: 52
Joined: 2005-04-24 17:23:56
Location: Småland/Stockholm

Re: Batchkommando för att radera vissa mappar i ett filträd

Post by Dand »

Ah!

Jag har kommit ett litet myrsteg längre nu...

Jag borde kunna skippa "attrib" för nu har jag lyckats lista alla mappar i filträdet som har [SpecifiktNamn] och jag får ut hela sökvägen...

dir c:\Testmapp /s/n/ah | FIND "[SpecifiktNamn]" > c:\Testmapp\dir.txt

ger mig följande resultat

Inneh†ll i katalogen c:\Testmapp\map aaa\mapp aab\[SpecifiktNamn]
Inneh†ll i katalogen c:\Testmapp\map aaa\[SpecifiktNamn]
Inneh†ll i katalogen c:\Testmapp\mapp bbb\mapp bbc\[SpecifiktNamn]
Inneh†ll i katalogen c:\Testmapp\mapp bbb\[SpecifiktNamn]

Så... Nu återstår att jag ska kunna grabba tag i varje rad och eliminera " Inneh†ll i katalogen " och så få in resterande som path i ett "rd"-kommando...
User avatar
übermensch
Hedersbit
Posts: 3190
Joined: 2002-03-08 0:03:05
Location: Kista
Contact:

Re: Batchkommando för att radera vissa mappar i ett filträd

Post by übermensch »

Lägg in cygwin(med t.ex bash), så får du tillgång till en massa godis såsom grep och vettig pipesyntax. Finnas tonvis med smarta guider för shellscripting utöver .bat-filer. Många är skrivna för linux, men funkar prima under windows med cygwin. Borde gå att få dem att starta via en klickbar fil också.
In cars several processors are connected by a bus
Dand
Posts: 52
Joined: 2005-04-24 17:23:56
Location: Småland/Stockholm

Re: Batchkommando för att radera vissa mappar i ett filträd

Post by Dand »

Tack för tipset - ska kolla närmare på det...

Men tanken var att jag skulle gör nåt som funkar på fler än min dator... Så en standard .cmd fil för Windows XP är det jag i första hand eftersträvar.

Jag tror jag har något som funkar nu (se nedan). Kommentera gärna om ni tycker något ser knasigt ut eller om det går att göra på ett enklare och bättre sätt...

@echo off

:: Set start directory and folder name of folder to delete.
set StartDir=c:\Testmapp
set FolderName=[SpecificFolder]

:: Set default directory as script root.
cd %StartDir%

:: Serch folder tree and print hits to the temporary temp_dir.txt
dir %StartDir% /s/n/ah/b | FIND "%FolderName%" > %StartDir%\temp_dir.txt

:: Check if temp_dir.txt is empty (zero bytes).
dir temp_dir.txt | find "temp_dir.txt" | find " 0 " > nul
if not errorlevel 1 goto THEEND

:: Process each line of temp_dir.txt
for /f "delims=" %%a in ('type temp_dir.txt') do (
rd "%%a" /s/q
)

:THEEND
:: Delete the temporary textfile.
del temp_dir.txt
Dand
Posts: 52
Joined: 2005-04-24 17:23:56
Location: Småland/Stockholm

Re: Batchkommando för att radera vissa mappar i ett filträd

Post by Dand »

Nu visade det sig att när jag flyttade till en annan dator så funkade inte detta så smärtfritt - så nu har jag skrivit om. Ny version som funkar på åtminstone mina datorer med Win XP Home och Pro.Och ni får gärna kommentera och korrigera mig om ni tycker jag är ute och seglar eller har förslag på bättre lösningar på det här.

@echo off
title Remove hidden [Developed] folders from ACDSee in a filetree.

:: Set default directory (start folder) to work in.
set StartDir="c:\Documents and Settings\User Name\Mina dokument\Mina bilder\00. ARKIV"
set TEMPFILE=temp_dir.txt
set DIRTEMPFILE=%StartDir%\%TEMPFILE%

:: Set default directory as script root.
cd %StartDir%

:: Create path list for all folders named [Developed]
:: Exclude paths to hidden Thumbs.db
dir %StartDir% /s/n/ah/b | FIND "[Developed]" | FIND /v "Thumbs.db" > %DIRTEMPFILE%

:: Check if temp_dir.txt is empty (zero bytes).
dir %StartDir% | find "%TEMPFILE%" | find " 0 " > nul
if not errorlevel 1 goto THEEND

:: Process each line of temp_dir.txt
for /f "delims=" %%a in ('type %DIRTEMPFILE%') do (
rd "%%a" /s/q
)

:THEEND
del %DIRTEMPFILE%
exit
Post Reply