Điểm:0

Tìm cách thay thế mọi phiên bản của tệp có kích thước khác không trong cây thư mục bằng tệp bó

lá cờ us

Tôi đang cố gắng tìm ra cách để một tập lệnh bó ghi đè lên mọi phiên bản của tệp byte khác không bên trong một thư mục cụ thể và các thư mục con của nó. Tôi đoán vì tôi đang tìm một tệp khác không, tôi có thể lặp lại nó bằng một lối thoát nếu nó không tìm thấy bất kỳ tệp nào có kích thước khác không?

Ví dụ, ghi đè lên mọi phiên bản của example.txt khi nó có kích thước tệp khác không:

Đ:\
\---Thư mục con1
    | example.txt <10 byte>
    |
    \---Thư mục con2
        | example.txt <0 byte>
        |
        \---Thư mục con1
                example.txt <20 byte>

Trong ví dụ này, D:\Subfolder1\example.txt và D:\Subfolder2\Subsubfolder1\example.txt sẽ bị ghi đè nhưng D:\Subfolder2\example.txt sẽ không bị thay đổi.

Cảm ơn @NiKiZe vì tất cả sự giúp đỡ của bạn!

Mã làm việc:

@ECHO TẮT

ĐẶT DPATH=%~dp0

CHO /R "%DPATH%" %%F VÀO (*** XEM BÊN DƯỚI) LÀM NẾU %%~zF GTR NEQ 0 CUỘC GỌI : NonEmptyFile "%%~F"
GOTO: EOF

:NonEmptyFile
ECHO Có tệp không trống: %1
GỌI: EOF

*** Thay thế bằng tên tệp mà bạn muốn thay thế, đảm bảo sử dụng ký tự đại diện một ký tự ở đâu đó (tôi đã sử dụng nó trong phần mở rộng - ví dụ: nếu tôi đang tìm kiếm example.txt, tôi đã thay thế * bằng example.t ?t)

lá cờ in
Nó có phải là `cmd` không? Bạn sẽ phải thực hiện các vòng lặp và lệnh gọi đệ quy, nhưng `for` nội bộ sẽ có thể thực hiện việc này.
lá cờ in
Tôi đã sai trong các cuộc gọi đệ quy, ít nhất là từ những gì tôi hiểu từ câu hỏi, nhưng có thể sai? Có lẽ nó chỉ nên kiểm tra "example.txt"?
wb6vpm avatar
lá cờ us
Thật không may, vâng, tôi đang tìm cách thêm tệp này vào một tệp lô hiện có, nơi tôi cần thay thế các tệp hiện có đã được cập nhật (kích thước khác 0) bằng tệp có kích thước 0 byte ban đầu và tệp tồn tại trong nhiều thư mục con mà có thể thay đổi, vì vậy tôi không thể mã hóa cứng mọi thư mục (phụ) có thể để chỉ xóa và khôi phục.
Điểm:1
lá cờ in

Lô tối thiểu đi theo một đường dẫn nhất định và tất cả các tệp con và đường dẫn con, gọi Tập tin không trống nhãn cho mọi tệp không trống.

@ECHO TẮT

ĐẶT DPATH=%~dp0

CHO /R "%DPATH%" %%F IN (*) LÀM NẾU %%~zF GTR 0 CALL :NonEmptyFile "%%~F"
GOTO: EOF

:NonEmptyFile
  ECHO Có tệp không trống: %1
GỌI: EOF

Bằng cách sử dụng %~1 trong chức năng, nó sẽ được mở rộng và bạn có thể sử dụng một cái gì đó như SAO CHÉP /Y "somefile.txt" "%~1" Cách bạn muốn ghi đè lên các tệp không được chỉ định.

Một tùy chọn khác để tạo "tệp trống" là tiếng vang.> "%~1"

Giải trình:

  • CHO /R "%DPATH%" %%F VÀO (*) LÀM đi bộ mọi tập tin
  • NẾU %%~zF GTR 0 nếu kích thước tệp lớn hơn ...
  • GỌI: NonEmptyFile "%%~F" Gọi :NonEmptyFile nhãn có tên tệp đã thoát

Để kiểm tra điều này ngay lập tức, hãy sử dụng FOR /R "D:\SubFolder1\" %F IN (*) DO IF %~zF GTR 0 ECHO NonEmptyFile "%~F"

Thông tin thêm về cách công việc được đưa ra bằng cách chạy vì /? Trong cmd

wb6vpm avatar
lá cờ us
Cám ơn rất nhiều! Tôi đã phải thực hiện một vài chỉnh sửa để nó hoạt động, nhưng điều này đã cho tôi một điểm khởi đầu rất tốt!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.