2011-01-21 48 views
30

Tôi có cấu trúc thư mục/foo/bar/fooBar/... Tôi muốn viết một lệnh Windows, nơi tôi có thể đề cập đến đường dẫn đến thư mục foo và nó xóa tất cả các tập tin và thư mục đệ quy trong/foo, nhưng nó KHÔNG nên xóa thư mục foo.Cách xóa tệp đệ quy

Tôi đã sử dụng rmdir /q /s [path to foo] nhưng lệnh này cũng xóa thư mục foo. Hãy cho tôi biết nếu có bất kỳ lệnh nào để thực hiện điều này.

+0

gì nếu bạn cd vào/path/to/foo trước khi thực hiện rmdir? – BigMike

+3

del/s * .xml Hoạt động trong Windows 10 – JenonD

+0

Bản sao có thể có của [Điều gì đã từng xảy ra với deltree và thay thế của nó là gì?] (Http://stackoverflow.com/questions/338895/what-ever-happened-to- deltree-and-whats-its-replacement) –

Trả lời

42
rd /s /q /path/to/foo 
md /path/to/foo 
+0

Tôi đã có một loạt các thư mục và tệp lồng nhau với một số tệp chỉ đọc. Điều này đã xóa tất cả chúng ngoại trừ chỉ đọc, đó là những gì tôi mong đợi. Điều này tốt hơn so với chức năng của Windows Server 2003, nó sẽ dừng quá trình này khi nó gặp phải một tệp chỉ đọc. Cảm ơn! –

2

deltree/foo/* sẽ hoạt động tốt.

+1

Tôi không đủ may mắn để không có lệnh deltree trên Windows XP – Akshay

+0

Sau đó, bạn nên gắn bó với giải pháp của @ Ferruccio. –

+0

Không hoạt động trong win7 x64 – m1m1k

7
del /f /s /q DirectoryWhichContainsFilesToDelete/\* 

này sẽ xóa tất cả các file trong thư mục DirectoryWhichContainsFilesToDelete mà không xóa các thư mục riêng của mình. Hãy vui vẻ :)

+3

Không xóa ** thư mục ** bên trong DirectoryWhichContainsFilesToDelete. –

+0

Điều này làm việc cho mục đích của tôi. –

1

Tôi đã sử dụng điều này trong một tập tin thực thi trong quá khứ. Nó sử dụng vòng lặp for để điều hướng cấu trúc thư mục.

Ở đây tôi xóa các thư mục phụ cvs ra khỏi cây, cần thiết khi sao chép từ nhánh này sang nhánh khác.

@echo off 
if /I exist CVS. rd CVS /s /q >nul 
for /F %%z in ('dir cvs /ad /s /b') do echo %%z && rd /s /q %%z 
echo Batchfile %0 is complete 
6

Tôi cũng đã gãi đầu vào vấn đề này. Nó đủ dễ dàng để tạo ra một vòng lặp for sử dụng rmdir tuy nhiên nó để lại đằng sau các thư mục có dấu cách trong các tên dài. Nó có thể thao tác một danh sách dir và nhận được tên tập tin 8,3 tuy nhiên đây là một giải pháp đơn giản hơn nhiều.

Tạo thư mục trống;

robocopy \empty_folder \folder_with_sub_folders /PURGE 

Tất cả thư mục con & tệp sẽ bị xóa.

3

Tôi đang tìm một lệnh đơn giản để xóa tất cả các tệp trong thư mục một cách đệ quy nhưng không thay đổi cấu trúc thư mục. Vì vậy, có lẽ đây có thể là thú vị;)

for /f "delims=" %i in ('dir /B /S /A:-DH') do @del /F /Q /A:H "%i" 

Lệnh 'dir/B/S/A: -D' danh sách chỉ file (/ A: -D) trong thư mục hiện đệ quy (/ S) không có ' báo cáo tóm tắt của dir (/ B). Các 'for' lặp qua mỗi dòng đầy đủ (/ delims =) và thực hiện lệnh xóa, bắt buộc và im lặng. Tôi cũng sử dụng cờ ẩn (/ H) cho cả việc liệt kê và xóa một số tệp bí ẩn (ví dụ: thumbs.db).

+0

điều này cũng làm việc cho tôi, tôi phải xóa một số tệp nhất định khớp với ký tự đại diện trong tất cả các thư mục con, vì vậy tôi đã sử dụng 'for/f" delims = "% i in ('dir/b/ad/s" P: \ Hệ thống \ ALPS \ ~ $ PS * "') làm @del/F/Q/A: H"% i "và wow, nó đã hoạt động! –

4
del X /f /s /q 
rd X /s /q 

S W này sẽ xóa thư mục ROOt. hãy làm lại lần nữa với

md X 

hoặc tạo bản sao của nó trước.

nếu không bạn sẽ phải làm hàng loạt funkiness

dir X /ad /b 

sẽ cung cấp cho bạn một danh sách các thư mục con trực tiếp của X.bạn có thể làm việc ra phần còn lại

+0

hoạt động trong win7 x64. Cảm ơn! – m1m1k

0

Để ngăn chặn xóa các thư mục foo thử thay đổi thư mục để foo trước khi xóa như:

cd c: \ foo rd/s/qc: \ foo

Thao tác này sẽ xóa tất cả các tệp và thư mục trong foo nhưng NOT foo. Một thông báo lỗi sẽ được hiển thị như sau "Quá trình không thể truy cập tệp vì nó đang được sử dụng bởi một tiến trình khác."

1

Cố gắng sử dụng Powershell:

powershell -Command "Remove-Item '\foo\*' -Recurse -Force" 
Các vấn đề liên quan