windows - Batchfil for at slette mappe, hvis den indeholder en specifik fil

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at oprette batch-fil, der vil gøre følgende:



  1. Det scanner gennem alle undermapper i specifikke mapper til
    specifik fil.

  2. Hvis det finder filen i undermappen, er hele indholdet af
    Denne undermappe og undermappe selv vil blive slettet.



For eksempel er filen jeg søger efter 'test.txt' og hovedmappen er 'C: \ Test' med følgende struktur:


A
B with test.txt
C
CC0
CC1
CC2 with test.txt
D 
DD0 
DD1 with test.txt
DD1D10 
DD1D11


Hver mappe har nogle andre tilfældige filer i den.


I dette eksempel skal script slette følgende mapper og alt indhold:


C:TestB
C:TestCC2
C:TestDD1


Jeg forsøgte flere forskellige scripts, men uden succes. Batchfilen placeres direkte i 'C: \ Test \'


Første script jeg kontrollerede er:


for /R \%\%f in (test.txt) do @IF EXIST \%\%f @echo "\%\%f" 


Det er korrekt angivet kun vej til mapper med text.txt inde. Fordi det fungerede, forsøgte jeg at følge en for at slette kun filer til test:


for /R \%\%f in (test.txt) do @IF EXIST \%\%f del /q /s /f "*.*" 


Det har slettet alle filer i hovedmappen og alle undermapper, hvor batchfilen er sammen med batchfilen selv.


Jeg forsøgte at redigere så flere andre scripts, der matchede mine betingelser, men resultaterne var indlysende. Sidste ting jeg kunne oprette er:


for /R \%\%p in (test.txt) do @IF EXIST \%\%p (rd "\%\%p" /s || del "*.*" /s/f)


Jeg ommited her '/q' parameteren for at kunne se, hvad den vil slette. Det finder rigtig første 'text.txt' fil. Hvis 'y' er valgt for at slette denne fil, returnerer scriptet fejl, at dette ikke er en korrekt mappe. Så begynder det at slette filer fra hovedmappen og alle undermapper med batchfil som første offer (det spørger hver gang, hvis jeg vil slette filer i en bestemt undermappe). Undermapper slettes ikke, kun deres indhold.


Jeg er ude af ideer.

Bedste reference


Når problemet virker for svært at løse, opdele det i to.


1) Skriv katalogtræet i en midlertidig tekstfil, en pr. Linje:


dir /ad /b /s \%1 >\%TEMP\%Temporary.txt


2) Iterate listede mapper og gør hvad du har brug for med hver af dem:


for /f \%\%g in (\%TEMP\%Temporary.txt) do if exist \%\%g	est.txt rd /s /q \%\%g

Andre referencer 1


Måske overhaler du dette lidt. Hvis du læser fra en fil, er det meget nemt at bare gøre rmdir, som automatisk sletter filerne og undermapperne i mappen. Din del *.* er ikke have et stilsæt og vil slette fra arbejdsdirektøren.


Husk, at din testmappe ikke skal have citater, hvis du bruger citater i scriptet. det skulle også være:



  c: \ Uanset hvilken mappe \ mappe

  
  c: \ Uanset hvilken mappe \ mappe 2



Dette skal fungere fint.


for /F "eol=; tokens=*" \%\%p in (test.txt) do @if exist \%\%p (echo rd /S "\%\%p")


fjern echo, når du er glad for, at den kun vil slette, hvad du vil. Brug af/Q-indstillingen hjælper dig også til at slette uden at bekræfte hver gang.


for /F "eol=; tokens=*" \%\%p in (test.txt) do @if exist \%\%p (rd /S /Q "\%\%p")