Tôi có một thư mục (hãy gọi nó là A) với rất nhiều thư mục con B, C, D, E, sau đó lại có các thư mục con B1, B2, B3, ... C1, C2, C3 ...
Làm cách nào tôi có thể sử dụng cmd để di chuyển tất cả các tệp từ tất cả các thư mục con vào thư mục "gốc" A?
Tôi có một thư mục (hãy gọi nó là A) với rất nhiều thư mục con B, C, D, E, sau đó lại có các thư mục con B1, B2, B3, ... C1, C2, C3 ...
Làm cách nào tôi có thể sử dụng cmd để di chuyển tất cả các tệp từ tất cả các thư mục con vào thư mục "gốc" A?
Câu trả lời:
Bài viết gốc của tôi bị bỏ qua để bao gồm phần mở rộng của tệp trong lệnh di chuyển.
%~ni
Chỉ trả về tên cơ sở, bạn cần sử dụng%~nxi
để có được cả tên tệp và phần mở rộng! Tôi hy vọng bạn đã không xáo trộn tên tập tin của bạn trên tài khoản của tôi! (
Từ một dấu nhắc lệnh:
cd /d C:\Path\To\A
for /r %i in (*) do @move "%i" "%~nxi"
Nếu bạn cần dọn dẹp các thư mục trống sau đó:
for /d %i in (*) do @rd /s /q "%i"
Bây giờ, nếu bạn có bất kỳ xung đột tên tệp nào, bạn sẽ tự mình thực hiện. Bạn có thể thêm /y
tham số vào move
lệnh (trước lệnh "%i"
) để buộc ghi đè. Nếu bạn muốn một cái gì đó khác biệt, bạn sẽ cần một chương trình khác có thể tự động đổi tên mọi thứ cho bạn.
Ngoài ra, nếu bạn muốn sử dụng tệp này trong một tệp bó, hãy thay đổi tất cả %
thành %%
.
FOR /r
- tốt đẹp!
Tạo một thư mục và sao chép tất cả các thư mục khác vào đó, sau đó nhấp chuột phải vào thư mục đó và chọn Tìm kiếm . Trong hộp tìm kiếm nhập *.*
.
Điều này sẽ liệt kê tất cả các tập tin và thư mục. Chọn tất cả các tệp bạn muốn trong thư mục gốc của bạn và cắt chúng. Điều hướng đến thư mục gốc của bạn và dán tất cả các tệp ở đó.
Cài đặt Cygwin (hoặc môi trường Unix khác cho Windows) và chạy như sau:
cd A
find . -type f -exec mv {} . \;
mv
và find
các biến thể, bạn có thể cần phải sử dụng find . -type f -exec mv -t . {} \;
thay thế.
mkdir -p a/a1 a/a2 a/a3 b/b1 b/b2 b/b3 c
và touch a/a1/foo a/a1/bar a/a2/baz a/a3/qux b/b1/quux b/b2/quuux b/b3/quuuux c/ccc
để chuẩn bị.
find . -type f -exec mv {} . ;
Và nó có vẻ hoạt động tốt.