Làm cách nào để xóa một thư mục được lồng khá sâu và tránh tên tệp Tệp quá dài?


70

Eclipse đã tạo một thư mục tạm thời trong một trong các thư mục được lồng khá sâu, ví dụ

dir1\dir1\dir1\dir1\...

Tôi không thể xóa thư mục này trong Windows thông qua Explorer, delhoặc rmdircác lệnh, cũng không phải lệnh Cygwin 'rm'. Làm thế nào tôi nên loại bỏ thư mục rất dài này?

Nó chỉ tiếp tục nói "Tên tệp quá dài ..."


Câu trả lời:


105

Nếu bạn giống tôi và không muốn cài đặt phần mềm bổ sung để khắc phục sự cố như thế này, tôi sẽ đi với đề xuất của XQYZ và sử dụng robocopyđể giải quyết vấn đề. (Trong trường hợp của tôi, vấn đề đã được tạo ra bởi robocopy ở vị trí đầu tiên, bằng cách sao chép một thư mục có các điểm giao tiếp đệ quy trong đó mà không cung cấp / XJ cho robocopy).

Để xóa cây thư mục bắt đầu từ c: \ subir \ more \ offending_dir :

Toàn bộ quá trình từng bước đơn giản như sau:

  1. cd c:\subdir\more để cd vào thư mục mẹ của nó.
  2. mkdir empty để tạo một thư mục trống.
  3. robocopy empty offending_dir /mir để phản chiếu thư mục trống vào thư mục vi phạm.
  4. Sau khi chờ đợi, bạn đã hoàn tất! Hoàn thành nó với:
  5. rmdir offending_dir để thoát khỏi thư mục vi phạm bây giờ trống rỗng và
  6. rmdir empty để thoát khỏi thư mục trống trung gian của bạn.

2
Đề nghị tuyệt vời. Vấn đề của tôi cũng được tạo ra bởi robocopy, và như bạn mô tả, bản sửa lỗi robocopy đã làm việc cho tôi.
Nathan Garabedian

3
Tôi cũng đã làm một mớ hỗn độn với robocopyvà các điểm giao nhau; cảm ơn đã chỉ cho tôi cách sử dụng nó để dọn dẹp mớ hỗn độn!
Mr.Wizard

các thư mục của tôi không được tạo bởi robocopy nhưng nó đã loại bỏ chúng một cách hoàn hảo
Sasha

11
Trình quản lý gói Node (NPM) gây ra sự cố này cho tôi. Có rất nhiều gói lồng nhau vì một số lý do.
David Sherret

đây rõ ràng là câu trả lời tốt nhất và hợp lý nhất, tốt hơn nhiều so với một tập lệnh đệ quy bespoke
tu sĩ-hoảng loạn

39

Điều này thực sự khá đơn giản để khắc phục. Nói rằng cấu trúc thư mục là như vậy:

C:\Dir1\Dir1\Dir1\Dir1…

Để sửa nó, chỉ cần đổi tên mỗi thư mục thành tên thư mục một ký tự cho đến khi không còn quá lâu để xóa:

  1. Đổi tên C:\Dir1thànhC:\D
  2. Hướng đến C:\D\
  3. Đổi tên C:\D\Dir1thànhC:\D\D
  4. Hướng đến C:\D\D\
  5. Đi 1 cho đến khi tổng chiều dài của đường dẫn <260

Đây là một tệp bó để tự động hóa quy trình (phiên bản đơn giản này là tốt nhất cho các thư mục đơn giản như thư mục được mô tả trong câu hỏi, đặc biệt là cho các tệp dùng một lần). Vượt qua nó thư mục cao nhất có thể (ví dụ C:\Dir1cho C:\Dir1\Dir1\Dir1…hoặc C:\Users\Bob\Desktop\New Foldercho C:\Users\Bob\Desktop\New Folder\abcdefghi…)

@echo off
if not (%1)==() cd %1
for /D %%i in (*) do if not %%i==_ ren "%%i" _
pushd _ 
%0 
popd

Giải thích kỹ thuật

Các giải pháp đề xuất khác là ngược; bạn không thể sửa nó bằng cách di chuyển từ thư mục trong cùng ra ngoài, bạn cần đi theo hướng khác.

Khi bạn cố gắng truy cập một thư mục, bạn làm như vậy bằng cách sử dụng đường dẫn tuyệt đối của nó cho dù rõ ràng hay không, bao gồm tất cả mọi thứ xuất hiện trước nó. Do đó, đối với cấu trúc thư mục như C:\Dir1\Dir1\Dir1\Dir1, độ dài của đường dẫn đến trong cùng Dir1là 22. Tuy nhiên, độ dài của đường dẫn đến ngoài cùng Dir1chỉ là 7, và do đó vẫn có thể truy cập được bất kể nội dung của nó (trong ngữ cảnh của đường dẫn của thư mục đã cho , hệ thống tệp không có kiến ​​thức về những gì nó chứa hoặc ảnh hưởng của nó đến tổng chiều dài đường dẫn của các thư mục con của nó, chỉ có các thư mục tổ tiên của nó. Bạn không thể đổi tên một thư mục nếu tổng chiều dài đường dẫn sẽ quá dài).

Do đó, khi bạn gặp một con đường quá dài, điều bạn cần làm là đi đến cấp độ cao nhất có thể và đổi tên nó thành tên một ký tự và lặp lại cho mỗi cấp độ trong đó. Mỗi lần bạn làm như vậy, tổng chiều dài của đường dẫn rút ngắn bằng sự khác biệt giữa tên cũ và tên mới.

Điều ngược lại cũng đúng. Bạn không thể tạo đường dẫn lớn hơn độ dài được hỗ trợ tối đa (trên DOS và Windows, MAX_PATH = 260). Tuy nhiên, bạn có thể đổi tên các thư mục, hoạt động từ bên ngoài trong cùng, thành một tên dài hơn. Kết quả là các thư mục sâu hơn có đường dẫn tuyệt đối> 260 sẽ không thể truy cập được. (Điều đó không làm cho chúng bị ẩn hoặc bảo mật, vì chúng đủ đơn giản để truy cập, vì vậy đừng sử dụng phương pháp này để ẩn các tệp.)


Lưu ý bên thú vị

Nếu bạn tạo các thư mục trong Windows 7 Explorer, có vẻ như Explorer cho phép bạn tạo các thư mục con sao cho tổng chiều dài dài hơn MAX_PATHvà thực tế là nó bị lừa bằng cách sử dụng tên tệp DOS DOS 8.3. Bạn có thể thấy điều này bằng cách tạo một cây như sau:

C:\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
   \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
    \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
     \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
      \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
       \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
        \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
         \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
          \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
           \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
            \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\

Nó dài 696 ký tự, tất nhiên dài hơn 260. Hơn nữa, nếu bạn điều hướng đến thư mục con trong cùng trong Explorer, nó sẽ hiển thị như mong đợi trong thanh địa chỉ khi không nằm trong tiêu điểm, nhưng khi bạn nhấp vào địa chỉ thanh, nó thay đổi đường dẫn đến C:\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\, chỉ dài 102 ký tự.

Trong XP, nó không làm điều này, thay vào đó nó kiên quyết từ chối tạo một đường dẫn dài hơn mức được hỗ trợ.

Điều thực sự thú vị là tìm hiểu cách Windows 7 Explorer xử lý các đường dẫn quá dài của hồi giáo khi NtfsDisable8dot3NameCreationtùy chọn được đặt.


3
có thể tạo ra một con đường dài hơn MAX_PATH, như đã giải thích ở đây . Thật không may, \\?` doesn't work with rmdir`.
grawity

@grawity, vâng, nhưng đó là bởi vì nó hoạt động dưới cùng một hiệu trưởng: một con đường ngắn được đổi tên thành một con đường dài hơn; điều đó chỉ thực hiện một cách linh hoạt bằng cách mở rộng một biến chứ không phải đổi tên thủ công thành la onger. Không thể tạo một thư mục có đường dẫn tuyệt đối quá dài khi lệnh tạo có đủ thông tin để xác định tổng chiều dài.
Synetech

3
@Synetech: Không, nó hoạt động khác nhau. Các đường dẫn như bỏ qua MAX_PATH theo \\?\C:\dir\dir\dir\dirnghĩa đen ; không có "biến" liên quan. (Nhưng như tôi đã nói, nó không hoạt động với hoặc các nội dung khác vì một số lý do.)rmdircmd.exe
grawity

ví dụ: thử chạy md C:\01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Nó sẽ không hoạt động vì hệ thống tệp có đủ thông tin để xác định rằng tổng chiều dài đường dẫn sẽ là 263 ký tự, vì vậy nó không thành công.
Synetech

2
(Ngoài ra, đừng nhầm lẫn độ dài đường dẫn với độ dài thành phần . Bạn không thể có một thư mục có tên trên 255 ký tự; tuy nhiên, bạn có thể có một đường dẫn dài hơn thế.)
grawity

17

Bạn có thể rút ngắn đường dẫn bằng cách sử dụng substđể tạo một ổ đĩa ảo:

C:\>subst Z: "C:\TEMP\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1"

Thay đổi vào ổ đĩa ảo:

cd Z:

Bây giờ bạn có thể xóa các tập tin:

del *.*

Xóa ổ đĩa ảo:

cd C:\TEMP
subst Z: /d

Xóa thư mục:

rd /s dir1

Không; lệnh đầu tiên sẽ không hoạt động nếu thư mục quá dài; nó sẽ trả về lỗi Tham số không hợp lệ .
Synetech

2
@Synetech, chắc chắn, nhưng nếu bạn chỉ dừng lại C:\TEMP\dir1\dir1\dir1, thì nó sẽ rút ngắn một phần của nó, do đó cho phép bạn tham gia. Nó giống như đề xuất đổi tên của bạn, nhưng thay vào đó là ánh xạ. ;)
Bobson

@Bobson, được rồi, bạn nói đúng; +1 cho cả hai bạn. :-)
Synetech

10

Tôi đã viết một ứng dụng C # nhỏ để giúp tôi xóa một cấu trúc rất sâu tương tự được tạo ra bởi việc sử dụng Robocopy bất cẩn và bản sao lưu từ homeserver; theo mặc định Robocopy coi các điểm chung như các thư mục thông thường ... :-( Bạn có thể kết thúc với một mớ hỗn độn lớn mà không nhận thấy nó.

Công cụ có sẵn tại CodePlex với các tệp nguồn, cho bất kỳ ai sử dụng.

http://deepremove.codeplex.com


LÀM!!! Câu trả lời này phải được đánh dấu là làm việc! Phần mềm hoạt động như bơ .. đã giải quyết vấn đề của tôi trong vài giây !! Cảm ơn bạn!
Rafique Mohammed

7

Cách đây một thời gian, tôi đã tạo ra một tiện ích nhỏ, có thể thực thi được gọi là DeleteFiles mà bạn có thể sử dụng để thực hiện nhiệm vụ này một cách dễ dàng.

Sử dụng tiện ích khép kín này, bạn chỉ cần làm:

deletefiles c:\yourfolder\subfolder\*.* -r -f

để xóa toàn bộ cấu trúc thư mục. -r đệ quy hệ thống phân cấp thư mục từ thư mục bắt đầu xuống, -f xóa mọi thư mục trống (sẽ là tất cả chúng nếu bạn sử dụng . như filespec). DeleteFiles hỗ trợ các đường dẫn dài hơn giới hạn Windows MAX_PATH, vì vậy nó sẽ hoạt động tốt trên các thư mục được lồng sâu.

DeleteFiles là mã nguồn mở và miễn phí và bạn có thể lấy mã nhị phân hoặc mã nguồn từ GitHub hoặc cài đặt trực tiếp bằng Chocolatey


Cảm ơn, công cụ tuyệt vời, ++ vì đã đưa nó vào chocolate;) Giúp bạn dễ dàng tích hợp vào công cụ CI!
Charles Ouellet

1
Điều này đã lừa Nếu bạn có một con đường thực sự dài, thêm > NULvào cuối có thể làm cho quá trình nhanh hơn.
ryscl 17/03/2016

Giải pháp robocopy không hiệu quả với tôi và cả giải pháp của Synetech. DeleteFiles làm việc cho tôi, nhưng vì một số lý do tôi phải chạy nó ba lần để tất cả các thư mục con bị xóa. Trong mọi trường hợp, điều này đã giải quyết vấn đề của tôi.
Frank

Re: chạy DeleteFiles 3 lần. Tôi cũng đã thấy điều đó - Tôi tin rằng do một số điều kỳ quặc của Windows đã khóa các thư mục chứa các tệp trong đó trong một thời gian ngắn ngay cả khi các tệp đã bị xóa. Nhiều đường chuyền bắt được sự thất bại thường xuyên của vấn đề này trong các thư mục con - có khả năng đa lồng nhau. Tôi thấy hành vi tương tự với Explorer xóa cây sâu.
Rick Strahl

5

Đơn giản và dễ dàng

tôi đã phải đối mặt với vấn đề tương tự kể từ rất lâu với node_modules có các thư mục rất lồng nhau. Vì vậy, cuối cùng đã tạo một tập lệnh để sửa lỗi có thể xóa các thư mục bằng cách rút ngắn đường dẫn.

https://github.com/dev-mraj/fdel

npm install fdel -g

fdel ./node_modules

Tôi không biết tại sao các nhà thiết kế chọn đưa mọi phụ thuộc vào cấu trúc khi họ có thể tạo ra nó với cấu trúc phẳng. Vì vậy, tập lệnh này là cách dễ nhất đối với tôi vì tôi đã sử dụng node.js
user2610529

4

Trong khi làm việc với Sikuli, tôi đã gặp phải một vòng lặp đệ quy Calculator.sikuli trong chương trình tạo ra một số lượng không thể đếm được của các thư mục "Calculator.sikuli.calculator.sikuli". Tôi có thể di chuyển cây, nhưng tên đường dẫn quá dài để xóa.

Sau khi thử một vài giải pháp với vòng lặp popd, Scandisk và không nhận được (có thể nhận thấy) ....

Tôi đã viết kịch bản này để 'đi sâu' vào các thư mục được đệ quy (trong một thư mục có tên 'a'), di chuyển chúng (đến một thư mục gọi là 'b'), sau đó xóa cây bị cắt bớt, di chuyển chúng trở lại (thành 'a') , và lặp lại:

1)cd D:\a\calculator.sikuli\calculator.sikuli\calculator.sikuli\calculator.sikuli
.............go deeeeeep in         dir *A*
2) move calculator.sikuli ---> D:\b    
.............move the crazy tree to dir *B*    
3) kill D:\a\calculator.sikuli <---KILL(rd)    
.............wipe dir *A*'s tree    
4) move D:\b\calculator.sikuli ---> D:\a\    
.............move the crazy tree back to dir *A*    
REPEAT
  • REM Được sử dụng để xóa các thư mục con đệ quy vô hạn
  • REM đề nghị dừng dịch vụ Windows Search trước (services.msc)

Remdirs.bat

D:
cd D:\a\calculator.sikuli\calculator.sikuli\calculator.sikuli\calculator.sikuli
move /-Y calculator.sikuli D:\b
cd D:\b
rd /s/q D:\a\calculator.sikuli
move /-Y calculator.sikuli D:\a
call D:\remdirs2.bat

Đây chỉ là một cuộc gọi để chạy lại tệp bó.


Tôi đã dành hàng giờ để xem xét điều này. Tập tin .bat này giống như một món quà từ thiên đường. Bạn, silo, là một thiên thần. xD
Squish

2

Chúng tôi đã có một vấn đề như thế này tại nơi làm việc khi nhật thực quyết định tạo ra rác trên ổ cứng. Chúng tôi đã sửa nó bằng cách sử dụng hàm / MIR của robocopy để phản chiếu một thư mục trống vào thư mục lồng nhau.


1

Tôi sẽ thử mở một dấu nhắc lệnh và chạy:

rmdir /s <directory>

Nếu điều đó không hiệu quả, tôi sẽ cd giữa chừng vào cây thư mục và cố gắng xóa một tập hợp con của các thư mục - giả sử 20 thư mục trong cùng - và sau đó tìm đường ra khỏi đó.


1
Tôi đã thử đề xuất của bạn ở trên và nó vẫn nói "Thư mục không trống" khi tôi chạy lệnh ở trên một số cấp độ sâu
user39186

1
Đó là bởi vì phương pháp này là ngược. ;-)
Synetech

1

Nếu đó là một thư mục mạng thì chỉ cần chia sẻ thư mục mẹ của thư mục đó và ánh xạ nó tới một ổ đĩa trên máy cục bộ của bạn và sau đó xóa thư mục của bạn.


21966 [main] mv 1288 D: \ work \ software \ cygwin \ bin \ mv.exe: *** fa Tal error - lỗi nội bộ khi đọc môi trường windows - quá nhiều biến môi trường?
dùng39186

Tôi đã thử di chuyển thư mục con aa lồng sâu 20 cấp và gặp lỗi trên
user39186

1

Mở một dấu nhắc lệnh.

Điều hướng đến thư mục / thư mục chứa 'dir1' cao nhất (chúng tôi sẽ giả sử C: \)

c:\> RD /s dir1

Chỉnh sửa (sau khi thêm ý kiến) :

Những ý tưởng khác:

MS cung cấp thông tin về cách giải quyết vấn đề (rất nhiều ý tưởng để thử) tại đây .

Ngoài ra còn có công cụ này (không bao giờ sử dụng cá nhân) - TooLongPath .

Có lẽ viết một cái gì đó (vì bạn có Eclipse) điều hướng tất cả các cách và sau đó sao lưu một cấp độ thư mục tại một thời điểm, xóa khi nó đi?


1
Tôi nhận được 3 lỗi sau trong khi sử dụng lệnh trên. Thư mục không trống Hệ thống không thể tìm thấy đường dẫn được chỉ định Tên tệp quá dài
user39186

Tôi đã cố gắng vượt qua mức 'n' sâu và thử sử dụng cùng một lệnh, nhưng dường như không có ích gì
user39186

Điều này làm việc cho tôi trên win7! cảm ơn
leoh

1

Một giải pháp khác: tải về Total Commander. Đây là một chương trình rất hữu ích, không chỉ bởi vì nó có tên tệp dài.

Phiên bản chưa đăng ký là nagware nhưng đầy đủ chức năng, nó sẽ thực hiện công việc.


1

Điều này có thể được thực hiện trực tiếp từ dòng lệnh hoặc trong một tệp bó bằng cách xây dựng đường dẫn UNC đến thư mục bạn muốn xóa

vì vậy thay vì

rmdir /s/q c:\mydirectory

sử dụng

rmdir /s/q \\?\c:\myDirectory

Các đường dẫn kiểu UNC như thế này có thể dài hơn nhiều và vượt qua giới hạn 260 char.


Không hoạt động. The path \\?\C:\temp\wqiyretiuqyertiuyqwteiyrutqwuiyertiqrqweirqyert\wqteriuwqyetriuqwteiryutwiuertiuyqerieerrt\IOQWUE~1\QIWUYE~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\ OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1 is too long.Windows 7 64-bit.
Victor

Không hoạt động cho windows 10. Vẫn còn quá lâu.
BananaAcid

Phiên bản `\\?` Làm việc cho tôi trên windows 10!
Peter

0

Khi tôi gặp vấn đề này, tôi chỉ cần đổi tên một số tên thư mục ngắn hơn nhiều, sau đó khi tổng đường dẫn đủ ngắn, nó sẽ xóa OK. Không có công cụ bổ sung cần thiết.


Vâng, nhưng như tôi đã nói, bạn phải làm việc từ bên ngoài, nếu không nó sẽ không hoạt động.
Synetech

Tất nhiên. Tôi thường tìm thấy tên thư mục dài nhất có xu hướng là tên đầu tiên (trong thư mục vá) hoặc cuối cùng. Hầu hết thời gian, bạn chỉ cần thay đổi một hoặc hai tên thư mục để có được độ dài phù hợp.
music2myear

Có, nhưng nếu bạn bắt đầu với cái trong cùng, nó sẽ không hoạt động vì renlệnh sẽ thất bại path too long.
Synetech

1
Có, các tập lệnh được cung cấp ở trên là một phương pháp thông minh và hiệu quả để xử lý vấn đề này một cách tự động. Nó chỉ xảy ra với tôi một vài lần và vì vậy tôi chỉ đơn giản là sử dụng quy trình đổi tên thủ công. Để làm điều đó, tôi chỉ cần bắt đầu đổi tên cấu trúc thư mục bất cứ nơi nào tôi đến trong cây vi phạm và kinh nghiệm của tôi là tên thư mục dài nhất xuất hiện thường xuyên hơn ở đầu hoặc cuối cấu trúc cây. Do đó, câu trả lời của tôi là hợp lệ, mặc dù có lẽ không phải là mạnh nhất hoặc thông minh nhất ở đây. Nó không đáng để downvote.
music2myear

> Tôi chỉ đơn giản là bắt đầu đổi tên cấu trúc thư mục bất cứ nơi nào tôi đến trong cây vi phạm Vâng, vâng, nếu bạn đã ở trong cây, thì bạn chắc chắn có thể đổi tên ít nhất là thư mục đó (bạn sẽ cần phải đến cha mẹ của nó) ; bạn cũng có thể đổi tên thư mục con, nhưng nó có thể quá dài.
Synetech

0

Tôi đã có cùng một vấn đề, ngoại trừ nó được tạo ra bởi một tác vụ Sao lưu Cobian đệ quy. Tôi bật ra phần mềm Cobian miễn phí bao gồm một ứng dụng Deleter có thể dễ dàng loại bỏ các thư mục lồng nhau phiền phức này một cách nhanh chóng.

Nó nằm dưới menu công cụ.


0

Tôi đã gặp vấn đề tương tự với một mớ thư mục sâu hơn 5000 thư mục mà một số ứng dụng Java đã làm và tôi đã viết một chương trình sẽ giúp bạn xóa thư mục này. Toàn bộ mã nguồn nằm trong liên kết này:

https://gitlab.imanolbarba.net/imanol/DiREKT

Nó đã loại bỏ toàn bộ sau một thời gian, nhưng nó đã xoay sở để thực hiện công việc, tôi hy vọng nó sẽ giúp những người (như tôi), gặp phải vấn đề bực bội tương tự


-3

Hệ thống tập tin của bạn có thể bị hỏng. Chạy chkdsk để xem nó có sửa chữa gì không, sau đó thử xóa thư mục.


Không, đó không phải là vấn đề. Vấn đề là tổng chiều dài đường dẫn dài hơn được hỗ trợ ( MAX_PATH=255). Điều này có thể xảy ra ngay cả với một hệ thống tệp không bị hỏng.
Synetech

Chạy chkdsk trên thư mục đã cho tôi lỗi sau. Ổ đĩa, đường dẫn hoặc tên tệp không hợp lệ
user39186
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.