Linia de comandă del c:mydir\*.* – șterge și subfolderele (Administrarea sistemului, Windows, Interfață De Linie De Comandă)

Mike Cole a intrebat.

Am un script care execută comanda:

del c:mydir*.*

Există un comutator de linie de comandă pe care îl pot folosi pentru a șterge și toate subfolderele din acel director? Vă mulțumim!

7 răspunsuri
Evan Anderson

Dacă există fișiere în directorul C:mydir, atunci va trebui să faceți ambele linii. În caz contrar, prima linie va face ceea ce doriți:

FOR /D %i IN (C:mydir*) DO RD /S /Q "%i"
DEL /Q C:mydir*.* 

Asta păstrează directorul C:mydir.

Editare: David1235 are dreptate. Dacă doriți să faceți acest lucru într-un fișier batch, va trebui să dublați „%” în linia „FOR …”.

Totuși, nu îmi este prea clar de ce scriptul lui David1235 are nevoie de „pushd” și „popd” când puteți specifica calea chiar în liniile „FOR …” și „DEL …”.

Comentarii

  • Când execut prima linie direct în promptul de comandă, funcționează. Cu toate acestea, când o copiez și o lipesc într-un fișier batch, primesc „mydir* was unexpected at this time”. –  > Por Mike Cole.
  • Anulează asta… Am folosit semnele de procente duble și am menționat mai jos. Mulțumesc!!! –  > Por Mike Cole.
David1235

Dacă doriți să rulați scriptul dvs. de oriunde, încercați

@echo off
pushd "C:mydir"
for /d %%d in (*.*) do rmdir /s /q "%%d"
del /q *.*
popd

Într-un script batch, aveți nevoie de semnele de procente duble. Din „help for”:

To use the FOR command in a batch program, specify %%variable instead
of %variable.  Variable names are case sensitive, so %i is different
from %I.

Comentarii

  • Mulțumesc pentru indiciu! Ți-aș da un upvote, dar nu am suficient rep încă. –  > Por Mike Cole.
  • +1 – Îți voi arunca unul, deoarece nu m-am gândit să menționez comportamentul dublu-% în postarea mea. –  > Por Evan Anderson.
  • Dacă aveți de gând să pushd nu aveți nevoie de bucla for, sau de del. Puteți folosi doar rmdir . direct. –  > Por Amit Naidu.
david

Există vreun motiv pentru care:


DEL /Q /S C:mydir*

nu va funcționa?

Comentarii

  • Pentru că nu șterge subfolderele. –  > Por Mike Cole.
BerggreenDK

În loc de complexe FOR…LOOPS etc. Aș folosi doar:

c:
cdmydir
del /q *.* /s 

… dar o metodă și mai rapidă este:

rd /q /s c:mydir

deoarece RD este „remove directory” la fel ca vechiul DELTREE

Comentarii

pauska

Da, rmdir.

(indiciu: rmdir /?)

Editare: Probabil că doriți să păstrați dosarul. Încercați acest lucru într-un fișier batch:

@echo off
rmdir C:mydir /S
mkdir C:mydir

Comentarii

  • Da. dar nu vreau să șterg directorul C:mydir în sine… doar tot ce este dedesubt. –  > Por Mike Cole.
  • Mi-am reeditat postarea, vă ajută? –  > Por pauska.
  • Nu vreau să șterg deloc dosarul. Am setări/permisiuni speciale etc. configurate pe el și nu vreau să fiu nevoit să le recreez. –  > Por Mike Cole.
  • Ah. Atunci veți avea nevoie de un script de lot mai avansat, la care eu nu mă pricep prea bine. Alții vor posta probabil ceva 🙂 –  > Por pauska.
Amit Naidu

Cea mai scurtă și mai simplă cale:

CD "%temp%OrYourPath
 && RD /q /s .

Acest lucru păstrează dosarul părinte, care poate avea ACL-uri pe care doriți să le păstrați. Dacă vreunul dintre conținuturi este în curs de utilizare, veți obține erori. Dacă doriți să le reduceți la tăcere și să le ignorați, adăugați un 2>nul la sfârșit.

Dacă doriți să rămâneți în directorul curent sau să aveți o cale UNC, utilizați PUSHD + RD + POPD în loc de CD + RD.

quigon

folosesc o mașină virutală cu ms dos 6.22. comanda rd nu poate avea parametri…

pentru a șterge c:folderfolderfolderfolder cu fișiere și orice altceva dacă sunteți pe c: folosiți:

deltree folder (va cere confirmare)deltree y c:folder (se va face imediat)