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.