Batch Script để di chuyển và đổi tên nếu có


2

Tôi có một thư mục chứa hàng ngàn .pdf mỗi tệp được đặt tên theo số tài khoản 5 hoặc 6 chữ số. Tôi có một tập lệnh sẽ tạo một thư mục có cùng số tài khoản và di chuyển tệp vào đó.

echo ON
Title  Move files Routine

setlocal enabledelayedexpansion
    pushd D:\test1\source\

    for /f "tokens=*" %%1 in ('dir /a-d /b D:\test1\source\*.pdf') do (
    set filename=%%1&set dirname=!filename:~0,6!

    if not exist D:\test1\source\!dirname! (md D:\test1\source\!dirname!)
    move %%1 D:\test1\source\!dirname!\
    )

PAUSE

Tuy nhiên, tôi cần chạy tập lệnh này hàng ngày vì tập tin mới được thêm vào thư mục nguồn và nếu tập lệnh di chuyển một tập tin vào một thư mục đã có một tập tin cùng tên, nó sẽ ghi đè lên nó thay vì đổi tên nó. Làm thế nào tôi có thể điều chỉnh kịch bản của mình để giải quyết vấn đề này. Lựa chọn của tôi dường như là

  1. chắp thêm vào tập tin hiện có (điều này dường như yêu cầu phần mềm bổ sung)
  2. Đổi tên (ví dụ: 123456.pdf thành 123456_001.pdf)
  3. Thêm ngày vào tên tệp (ví dụ: 123456.pdf thành 123456_MMMMddyyyy.pdf)

Tôi ổn với bất kỳ tùy chọn nào trong số này, tôi chỉ không biết làm thế nào để đưa nó vào kịch bản. Bất kỳ sự giúp đỡ nào cũng được đánh giá cao.

Câu trả lời:


0

Bạn có thể làm 3), nhưng tôi cũng khuyên bạn nên thêm thời gian hiện tại:

echo Timestamp = %date:~6,4%-%date:~3,2%-%date:~0,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%

Điều này sẽ xuất ra, ví dụ,

Dấu thời gian = 2018-03-13-17-18-38

Vì vậy, tệp bó của bạn sẽ trông như thế này:

echo ON
Title  Move files Routine

setlocal enabledelayedexpansion
    pushd D:\test1\source\

    for /f "tokens=*" %%1 in ('dir /a-d /b D:\test1\source\*.pdf') do (
    set filename=%%1&set dirname=!filename:~0,6!

    if not exist D:\test1\source\!dirname! (md D:\test1\source\!dirname!)
    move %%1 D:\test1\source\!dirname!\%%1--%date:~6,4%-%date:~3,2%-%date:~0,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%.pdf
    )

PAUSE

Điều gì nếu hai tập tin được di chuyển trong cùng một giây? Ngoài ra, tôi nghĩ rằng bạn muốn sử dụng mở rộng bị trì hoãn cho các biến chọn các chuỗi con từ các biến Ngày và Giờ.
Kẻ giả mạo Twisty

Cảm ơn glfabro Khi tôi chạy tập lệnh với các bổ sung của bạn, tôi nhận được phản hồi này D: \ test1 \ source> (đặt tên tệp = 10002.pdf và đặt dirname =! Tên tệp: ~ 0,6! Nếu không tồn tại D: \ test1 \ source \ ! dirname! (md D: \ test1 \ source \! dirname!) di chuyển 10002.pdf D: \ test1 \ source \! dirname! \ 10002.pdf - / 15 / - 0-Th- 9-45-57. pdf) Cú pháp của lệnh không chính xác. Tôi đoán lỗi cú pháp là cách nó tạo thành ngày, cụ thể là "/ 15 /" Tôi đã chơi với việc thay đổi định dạng ngày, nhưng không thành công. Nó có thể được dựa trên một thiết lập miền địa phương?
callasabra

Hmmm đó thực sự phụ thuộc địa phương. Nhập vào dấu nhắc lệnh 'echo% date%' và 'echo% time%' và cho tôi biết kết quả
glfabro 16/03/18
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.