Làm cách nào tôi có thể làm phẳng một thư mục trong Windows 7, giả sử tất cả các tên tệp là khác nhau?


19

Ví dụ: giả sử tôi có hệ thống phân cấp thư mục sau:

Folder1
   File1
   Folder2
      File2
   Folder3
      File3
      Folder4
         File4

Tôi muốn thực hiện một số lệnh dẫn đến:

Folder1
   File1
   File2
   File3
   File4

hoặc một cái gì đó tương tự. Tôi không quen thuộc lắm với Windows, vì vậy tôi sẽ đánh giá cao chi tiết nhất có thể trong câu trả lời.


Bạn đang tìm kiếm một chương trình hiện có để làm điều này cho bạn, hoặc một đoạn mã (ngôn ngữ lập trình) làm điều này?
Matt Ball

@MattBall: Tôi đang tìm cách dễ nhất để làm việc này. Lý tưởng nhất, điều này sẽ mở ra một thiết bị đầu cuối và nhập một số lệnh. Một lần nữa, tôi không có nhiều kinh nghiệm với Windows, vì vậy xin vui lòng cho tôi biết nếu có cách nào tốt hơn. Cảm ơn.

Câu trả lời:


32

Cách dễ nhất tuyệt đối là vào thư mục gốc chung và thực hiện tìm kiếm tất cả các tệp (tức là tìm kiếm *). Khi tìm thấy tất cả các tệp, đánh dấu tất cả các tệp, nhấn Ctrl + X và điều hướng đến thư mục gốc chung một lần nữa. Bây giờ nhấn Ctrl + V để dán tất cả các tệp vào thư mục gốc. Khi hoàn tất, xóa tất cả các thư mục con.

Tôi không biết nếu điều này có thể được thực hiện như một công việc hàng loạt.


1
Tôi thích sự đơn giản của việc này, nhưng tôi đã thử nó với các tệp 40k và nó đã làm hỏng quá trình thám hiểm.
UpTheCux

Câu trả lời tổng chỉ huy có vẻ dễ dàng hơn đối với tôi.
Ev0oD

13

Cuối cùng tôi đã sử dụng phương pháp quyền hạn này khi tôi cần làm phẳng một cấu trúc phân cấp lớn (trong trường hợp của tôi là pngs):

Get-ChildItem C:\sourcefolder -Recurse -Filter "*.png" | Copy-Item -destination C:\destinationfolder\

Để làm phẳng có lẽ Move-Item phù hợp hơn?
geisterfurz007 Dừng sự hỗn loạn này vào

4

cửa sổ exe: http://en.sourceforge.jp/projects/sfnet_flatfolder/

hoặc AHK:

fileselectfolder,MyFold,::{20d04fe0-3aea-1069-a2d8-08002b30309d}
SetWorkingDir, %MyFold%
loop, *.*,0,1
{
  parentpath := RegExReplace(A_LoopFileDir,"\\","-")
  ;StringReplace, parentpath, A_LoopFileDir, \,-,All
  newname = %parentpath%-%A_LoopFileName%
  ;msgbox %newname%
  If a_loopfiledir <>
    filemove, %a_loopfilefullpath%,%newname%
}

loop, %myfold%\*.*,2,1
  fileremovedir, %a_loopfilefullpath%,1

exitapp

hoặc sử dụng thư mục Opus

hoặc Powershell

(ls -r -include *.jpg) | % { mv -literal $_ $_.Name.Insert(0, [String]::Format("{0} - ", $_.Directory.Name))}

hoặc Batch (như đã đề cập ở trên)

hoặc tìm kiếm thủ công, cắt và dán như đã đề cập ở trên

Có nhiều cách, tùy thuộc vào kỹ năng và khuynh hướng của bạn, bạn có thể chọn bất kỳ cách nào trong số này, và tinh chỉnh theo nhu cầu của bạn.

Bạn có thể cần loại bỏ các thư mục trống sau thao tác trên


1
Lệnh powershell ngắn và hoạt động tốt
Maxim Yefremov

3

Nếu thỉnh thoảng bạn chỉ cần làm phẳng thư mục thủ công, Total Commander là hoàn hảo.

Trong Total Commander: Goto đến thư mục của bạn, bạn muốn làm phẳng. Trong menu bấm Lệnh> Xem chi nhánh . Và bạn thấy tất cả được làm phẳng, bạn có thể di chuyển / sao chép nó vào một thư mục khác.

Nếu bạn cần sửa lại một chút với tên tệp: Chọn tất cả các tệp trong chế độ xem dẹt, trong menu, hãy chuyển đến Tệp> Công cụ đa tên . Tại đây, bạn có thể thêm một số thông tin từ đường dẫn đến tên tệp thực tế bằng cách sử dụng "Đổi tên mặt nạ", bạn chỉ cần sử dụng thẻ / nút plugin ở đó, tính năng tìm kiếm & thay thế và nút bấm nhỏ hơn, cho phép bạn thực hiện một số chỉnh sửa cuối cùng cho tên tệp trong soạn thảo văn bản. Nghe có vẻ phức tạp, nhưng thực sự là cách dễ nhất IMO :)


Chỉ huy Windows là gì? Ý bạn là Tổng chỉ huy?
UpTheCux

Chính xác :) Được sử dụng trong 10 năm, tên là Windows Commander hồi đó. Đã chỉnh sửa
teejay

Cảm ơn. Chỉ cần thử nó. Sẽ không hoạt động với 40k tệp nhỏ mặc dù :( đã tiêu thụ rất nhiều CPU trong 10 phút sau đó xuất hiện các lỗi 'không thể tạo tệp' lặp đi lặp lại.
UpTheCalet

Việc sử dụng CPU và sự chậm chạp ngụ ý là không may nhưng có thể hiểu được :) Lỗi là một cái gì đó khác .. có thể là đặt tên xấu, lỗi tổng chỉ huy hoặc chỉ là khả năng của TC không thể xử lý nhiều tệp này. Tôi sẽ thử đổi tên số lượng tệp nhỏ hơn trước hoặc sử dụng phiên bản mới hơn của TC
teejay

@teejay, tôi đã câu được thông tin chi tiết về đề xuất của bạn, nhưng cuối cùng tôi cũng xoay sở được. Tôi đã sử dụng plugin expander2 để trích xuất các phần của đường dẫn và biến chúng thành tiền tố của tên tệp. Bạn có thể muốn thêm một số chi tiết cho chàng trai tiếp theo. Tx.
killogre 5/03/2015

3

Khá đơn giản với tùy chọn dòng lệnh cho những người không thiên về kỹ thuật.

  1. Tạo một tệp ở đâu đó gọi là "flatten.cmd"
  2. Mở tệp đó trong Notepad
  3. Trong tệp, đặt như sau:

    FOR /R {SourcePath} %%G IN (*.mp3) DO move "%%G" {Destination}
    
  4. Thay thế "{SourcePath}" bằng thư mục bạn muốn làm phẳng. Trong trường hợp của bạn "c: \ Folder1"

  5. Thay thế "{Destination"} bằng thư mục bạn muốn các tệp được di chuyển đến. Trong trường hợp của bạn cũng "c: \ Folder1". Mã bây giờ trông giống như:

    FOR /R c:\Folder1 %%G IN (*.mp3) DO move "%%G" c:\Folder1
    
  6. Mở một cửa sổ dòng lệnh. Có thể làm điều này một số cách, nhưng điều này là nhanh chóng:

    • Nhấp vào nút Bắt đầu
    • Nhấp vào Tất cả các chương trình
    • Nhấp vào Phụ kiện
    • Nhấp vào Dấu nhắc lệnh
  7. Trong cửa sổ dòng lệnh, gõ:

    cd {folder where you put the flatten.cmd file}
    flatten
    

Và điều đó sẽ làm được điều đó (Windows 8+) Tôi vừa làm điều đó để làm phẳng một thư mục gồm 10.000 tệp nhạc. Hoạt động như một lá bùa.

Bạn có thể tìm thấy các tùy chọn cho tiện ích dòng lệnh FOR tại https://technet.microsoft.com/en-us/l Library / bb490909.aspx .


1

sử dụng tập lệnh bó (ngoài đỉnh đầu của tôi):

Tra cứu lệnh FOR

Dòng đầu tiên di chuyển tất cả các tệp từ thư mục con lên đến thư mục gốc Thứ hai xóa các thư mục con

for /f %f in ('dir "c:\folder\*" /s/b/a-d') do if not %~ff"=="c:\folder" move "%f" "c:\folder"
for /f %f in ('dir "c:\folder\*" /s/b/ad') do if not "%~ff"=="c:\folder" rd /s/q "%f" 

vì vậy tôi phải mở một thiết bị đầu cuối và nhập các lệnh này, đảm bảo rằng tôi thay thế 'thư mục' bằng đường dẫn thích hợp? Cảm ơn.

Nếu bạn không muốn viết nó trong một kịch bản thì có. OTOH .....
Tăng trước

Điều này có thể được khái quát và gắn liền với một hành động menu ngữ cảnh? Tôi rất thích có thể nhấp chuột phải vào một tệp, nhấp vào "Làm phẳng tệp", sau đó để tất cả các tệp trong đó được chuyển lên cấp độ của thư mục. Xóa thư mục sau cũng sẽ tốt đẹp.
MAW74656

vâng, nó có thể đặt nó trong một tệp bó với% 1 làm tên thư mục. stackoverflow.com/questions/6162415/ cường
Preet Sangha

-Có lẽ bạn có thể giúp với superuser
này.com / q / 552768/59747

1

Xin chào, bạn cũng có thể sử dụng công cụ xxcopy (www.xxcopy.com), xcopy của nó trên steriod (sắp xếp). Với công cụ này, bạn có thể "làm phẳng" các tệp trong các thư mục thành một thư mục.

c:> xxcopy / thư mục nguồn / flatten / SG

Chỉ cần đọc liên kết này: http://www.xxcopy.com/xxcopy16.htm

Chúc mừng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.