Tôi không hiểu tại sao bạn không thể sử dụng tệp lô. Nhưng đây là một giải pháp mà nên làm việc với hầu hết các tên tập tin.
Critical - trước tiên bạn phải chắc chắn rằng bạn có một tên biến không xác định, tôi sẽ sử dụng fname
set "fname="
Tiếp theo là lệnh để thực sự làm việc đổi tên. Nó sẽ không hoạt động đúng nếu fname đã được xác định.
for %a in (prefix*.txt) do @(set "fname=%a" & call ren "%fname%" "%fname:*prefix=%")
Biến fname được định nghĩa cho mỗi lần lặp và sau đó là cú pháp %fname:*prefix=%
thay thế sự xuất hiện đầu tiên của "tiền tố" không có gì. Điều khó khăn là Windows lần đầu tiên cố gắng mở rộng% fname% khi lệnh được phân tích cú pháp đầu tiên. Tất nhiên điều đó sẽ không hiệu quả vì nó chưa được xác định. Trên dòng lệnh, phần trăm được giữ nguyên nếu biến không được tìm thấy. CALL gây ra một giai đoạn mở rộng thêm xảy ra sau khi biến đã được đặt, do đó việc mở rộng hoạt động.
Nếu fname được xác định trước khi chạy lệnh, nó sẽ chỉ đơn giản cố gắng đổi tên cùng một tệp cho mỗi lần lặp thay vì giá trị đang được gán trong vòng lặp.
Nếu bạn muốn chạy lại lệnh bằng một tiền tố khác, trước tiên bạn sẽ phải xóa định nghĩa.
EDIT - Đây là một tập tin thực thi có tên là "RemovePrefix.bat" mà không được công việc
::RemovePrefix.bat prefix fileMask
@echo off
setlocal
for %%A in ("%~1%~2") do (
set "fname=%%~A"
call ren "%%fname%%" "%%fname:*%~1=%%"
)
Giả sử bạn đã tập tin có tên như "prefixName.txt"
, sau đó bạn sẽ sử dụng kịch bản bằng cách thực hiện
RemovePrefix "prefix" "*.txt"
Tệp lô sẽ đổi tên tệp trong thư mục hiện tại của bạn. Tệp batch cũng sẽ phải nằm trong thư mục hiện tại của bạn trừ khi tệp batch tồn tại trong một thư mục có trong biến PATH của bạn. Hoặc bạn có thể chỉ định đường dẫn đầy đủ đến tệp lô khi bạn gọi nó.
Quy tắc mở rộng khác nhau trong tệp lô.FOR biến phải được tham chiếu dưới dạng %% A thay vì% A và %% fname %% không được mở rộng ban đầu, thay vào đó tỷ lệ phần trăm đôi được chuyển đổi thành một phần trăm và sau đó% fname% được mở rộng sau CALL. Nó không quan trọng nếu fname đã được xác định với các tập tin thực thi. SETLOCAL làm cho định nghĩa của fname tạm thời (cục bộ) thành tập tin thực thi.
Các lệnh này thậm chí không có vẻ hoạt động tốt với các thư mục rất lớn. Nó tiếp tục thêm tiền tố vào các tệp mà nó đã thêm tiền tố vào. – hnviet