Hỏi/ Thắc mắc - Di chuyển file hàng loạt về thư mục gốc | VN-Zoom | Cộng đồng Chia Sẻ Kiến Thức Công Nghệ và Phần Mềm Máy Tính

Adblocker detected! Please consider reading this notice.

We've detected that you are using AdBlock Plus or some other adblocking software which is preventing the page from fully loading.

We need money to operate the site, and almost all of it comes from our online advertising.

Please add vn-z.vn to your ad blocking whitelist or disable your adblocking software. 

All the knowledge we share is completely free. If you are willing, please support us here.

×

Hỏi/ Thắc mắc Di chuyển file hàng loạt về thư mục gốc

Chào mn, em có 1 thư mục vs 200 thư mục con, mỗi thư mục con có 5 file ảnh, do công việc nên em copy file ảnh ra 1 thư mục riêng để chỉnh sửa. Giờ em muốn chuyển các ảnh đã sửa về lại 200 thư mục con như ban đầu thì có cách nào k các bác nhỉ ?
 

Attachments

  • photo_2025-03-21_22-10-47.jpg
    photo_2025-03-21_22-10-47.jpg
    59.8 KB · Lượt xem: 20,527

malemkhoang

Rìu Chiến
@TRANBANG1997
Có thể triển khai như sau:
Liệt kê tên tệp đã sửa (dir /w), mỗi tệp trên 1 dòng, lưu vào tệp nguon.txt.
Liệt kê thư mục gốc theo đệ quy (dir /w /s) vào tệp dich.txt; soạn thảo lại tệp này bằng cách ghép tên thư mục vào trước tên tệp đối với từng thư mục con.
Lệnh sử dụng là lệnh "copy /y". Lập tệp .cmd với lệnh copy, mỗi dòng là tên một tệp trong tệp nguon.txt (nên có đủ đường dẫn), đích là tên tệp tương ứng với đường dẫn tuyệt đối được lập trong tệp dich.txt.
Trình soạn thảo là NotePad++. Nếu không biết dùng soạn thảo khối của NotePad++ thì dùng Excel.​
 
@TRANBANG1997
Có thể triển khai như sau:
Liệt kê tên tệp đã sửa (dir /w), mỗi tệp trên 1 dòng, lưu vào tệp nguon.txt.
Liệt kê thư mục gốc theo đệ quy (dir /w /s) vào tệp dich.txt; soạn thảo lại tệp này bằng cách ghép tên thư mục vào trước tên tệp đối với từng thư mục con.
Lệnh sử dụng là lệnh "copy /y". Lập tệp .cmd với lệnh copy, mỗi dòng là tên một tệp trong tệp nguon.txt (nên có đủ đường dẫn), đích là tên tệp tương ứng với đường dẫn tuyệt đối được lập trong tệp dich.txt.
Trình soạn thảo là NotePad++. Nếu không biết dùng soạn thảo khối của NotePad++ thì dùng Excel.​
Vâng ah, em cảm ơn a ah, để em test thử ah
 

malemkhoang

Rìu Chiến
Dù bạn làm được hay chưa thì tôi vẫn trình bày thêm về vấn đề này.
Nhu cầu của bạn có thể giải quyết trong một câu lệnh cmd, mặc dù tôi cho rằng lệnh này không chuẩn. Trong các lệnh cmd có lệnh "forfiles" dùng để duyệt tệp tin trong thư mục rồi thực thi một lệnh trên tệp tin đó. Nhưng trong trường hợp này, do tệp tin chịu sự tác động của lệnh forfiles vừa là nguồn, vừa là đích nên phải hoá giải điều đó thì mới thành công. Vì vậy, tôi dùng forfiles đối với thư mục chứa các tệp chưa sửa gồm nhiều thư mục con. Đối với lệnh forfiles này tôi yêu cầu nó trả lại tên tệp để ghép với đường dẫn đến thư mục chứa các tệp đã sửa làm tham số nguồn cho lệnh "copy"; trả lại fullpath để làm tham số đích của lệnh "copy".
Do forfile trả lại tên tệp đặt trong dấu nháy kép nên khi đem ghép với đường dẫn sẽ tạo thành đường dẫn tuyệt đối phi chuẩn - tôi cho là như thế.
Song, trong thực hành thì kết quả thu được đúng yêu cầu nên tôi cũng không xem xét thêm nữa.
Xem xét ví dụ dưới đây:
Đặt thư mục chứa các tệp chưa sửa là X:\cha\, nó chứa các thư mục con: .\c1, .\c2, .\c3 v.v...
Thư mục chứa các tệp đã sửa là Y:\work\;
phần mở rộng tệp tin là .png
Câu lệnh của tôi như sau:
forfiles /P X:\cha\ /S /M *.png /C "cmd /c copy /y Y:\work\@file @path"

Giải thích tham số lệnh forfiles:
/P: thư mục cần duyệt
/M: các tệp cần xem xét thực hiện lệnh cmd
/S: duyệt cả thư mục con
/C: câu lệnh cmd trong ngoặc kép
@file: tên tệp tin đủ phần mở rộng do forfiles trả lại
@path: đường dẫn tuyệt đối do forfiles trả lại

Lưu ý: Trường hợp xấu nếu cửa sổ cmd của bạn báo lỗi tên tệp tin Unicode không thực thi được thì cần phải lần vết những tệp tin đó ở thư mục con nào để xử lý riêng. Dầu vậy, điều này là khó xảy ra.​
 

khoa78

Búa Gỗ
phức tạp dạ, vô mục find file của explorer, search *.jpg, nó ra toàn bộ file trong folder con luôn. rồi cut paste. xong. y chang của hinu97
 

Hamano Kaito

Moderator
Này phải viết lệnh copy, vòng lặp, lệnh gán và lệnh cuối là lệnh dán. Cả 1 vấn đề đấy {redface}
Thấy khó quá thì tìm mấy soft copy file hàng hoạt ấy. Dùng soft đó chia các file vào các thư mục con là được
 

Jailbird6824

Búa Gỗ Đôi
Chào mn, em có 1 thư mục vs 200 thư mục con, mỗi thư mục con có 5 file ảnh, do công việc nên em copy file ảnh ra 1 thư mục riêng để chỉnh sửa. Giờ em muốn chuyển các ảnh đã sửa về lại 200 thư mục con như ban đầu thì có cách nào k các bác nhỉ ?
dùng GPT 3o-mini code phút mốt

Tạo file gì đó .cmd hay .bat rồi sửa lại đường dẫn source / destination r chạy thôi

p/s: nhớ backup trước khi chạy lệnh :cool:

Mã:
@echo off
set "source=C:\DuongDan\AnhChinhSua"
set "destination=C:\DuongDan\ThuMucGoc"

for /d %%D in ("%destination%\*") do (
    for %%F in ("%%D\*.*") do (
        if exist "%source%\%%~nxF" (
            copy /Y "%source%\%%~nxF" "%%D\"
            echo Đã copy %%~nxF vào %%D
        ) else (
            echo File %%~nxF không có trong thư mục chỉnh sửa.
        )
    )
)
pause
 

malemkhoang

Rìu Chiến
Thật là thú vị khi thấy được điều hoàn hảo. Với lệnh "for /f", tôi đã đạt được điều đó. Câu lệnh của tôi như sau (xem ví dụ tại #11) :
for /F %G in ('dir /b /s X:\cha\*.png') do copy /y "Y:\work\%~nxG" "%G"

Giải thích tham số lệnh:
/F: dùng cho việc duyệt tệp tin;
%G: biến đại diện nhận kết quả của lệnh for để chuyển giao tham số cho lệnh khác;
dir /B /S: liệt kê tệp tin với đường dẫn tuyệt đối cho cả thư mục con;
%~nxG: biến đổi đường dẫn tuyệt đối thành tên tệp tin;
%G với ký tự G có thể là bất kỳ kí tự nào, khi dùng trong tệp batch thì phải biểu diễn thành %%G;

Lệnh for /f này thực hiện như thế nào:
for /F triển khai lệnh "dir /B /S" đến tận thư mục con để nhận kết quả trả về theo từng dòng rồi gán tuần tự từng dòng vào biến %G, là đường dẫn tuyệt đối của một tệp tin; tiếp đó "for /F" cho thực thi lệnh sau "do", lệnh này sử dụng tham số là giá trị của biến %G. Lệnh ở đây là "copy" do đó cần có tham số nguồn và tham số đích; tham số nguồn được diễn giải bằng tên tệp tin (vì tên tệp tin nguồn và đích giống nhau) ghép với thư mục nguồn, do giá trị của "%G" là đường dẫn tuyệt đối nên phải tách lấy tên tệp tin bằng biến "%~nxG"; tham số đích lấy giá trị của biến %G đã là đường dẫn tuyệt đối rồi nên không cần phải biến đổi gì thêm; tham số nguồn là tên tệp tin đã sửa nằm ở thư mục tệp tin đã sửa nên đường dẫn không bị thay đổi trong vòng lặp "for", tham số đích là tệp tin chưa sửa nhưng nằm ở các thư mục con khác nhau, do đó sử dụng đường dẫn tuyệt đối biến đổi theo vị trí tệp tin mới phù hợp.
Kết quả là sau khi thực thi, tệp tin đã sửa ở thư mục chứa nó được sao chép về từng thư mục con theo đúng vị trí của nó ở thư mục ban đầu (gốc).

AI viết lệnh là giành cho người lạc quan, tôi viết lệnh là giành cho người bi quan, do đó lệnh chỉ có một dòng.​
 

malemkhoang

Rìu Chiến
@Jailbird6824
AI viết đoạn code này tạm cho là được chỉ ở chỗ đem ra thực thi không bị lỗi. Nhưng AI này bị thần kinh phân liệt khi dùng "for" lồng trong "for /D" để duyệt file. "for /D" chỉ duyệt thư mục con, trong khi thư mục con chưa dậy thì mà đã có con để nuôi thì người ta sẽ bị sót không thể biết đến bọn con này của chúng.
Trường hợp ở đây nói là "... 200 thư mục con, mỗi thư mục con có 5 file..." thì vẫn phải duyệt cho bằng hết các loại "cháu, chắt" của nó mới là hoàn chỉnh.​
 

Hamano Kaito

Moderator
@Jailbird6824
AI viết đoạn code này tạm cho là được chỉ ở chỗ đem ra thực thi không bị lỗi. Nhưng AI này bị thần kinh phân liệt khi dùng "for" lồng trong "for /D" để duyệt file. "for /D" chỉ duyệt thư mục con, trong khi thư mục con chưa dậy thì mà đã có con để nuôi thì người ta sẽ bị sót không thể biết đến bọn con này của chúng.
Trường hợp ở đây nói là "... 200 thư mục con, mỗi thư mục con có 5 file..." thì vẫn phải duyệt cho bằng hết các loại "cháu, chắt" của nó mới là hoàn chỉnh.​
Trông chờ gì vào AI nhỉ sếp ! {rofl}
 

malemkhoang

Rìu Chiến
@Hamano Kaito
"Trí tuệ Nhân" thì phân tán, khó tổng hợp do tính "Nhân". "Trí tuệ nhân tạo" tổng hợp nhanh chóng từ "Trí tuệ Nhân". Dù gì thì "Trí tuệ nhân tạo" cũng lệ thuộc "Trí tuệ Nhân". Archimedes la làng rằng "εὕρηκα!" thì cũng thể như một thằng điên.

 
Sửa lần cuối:


Top