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...
Batchkommando för att radera vissa mappar i ett filträd
Re: Batchkommando för att radera vissa mappar i ett filträd
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...
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...
- ü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
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
Re: Batchkommando för att radera vissa mappar i ett filträd
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
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
Re: Batchkommando för att radera vissa mappar i ett filträd
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
@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