Biến để nhận đường dẫn tuyệt đối trong tập lệnh bó cửa sổ


9

Tôi có đoạn script sau để liệt kê tất cả các tệp, đệ quy từ một thư mục, có .phtmlphần mở rộng.

@echo off
setlocal
for /f %%G in ('forfiles /s /m *.phtml /c "cmd /c echo @relpath"') do echo %%G >> listoffiles.txt
endlocal
exit

Nó chỉ liệt kê đường dẫn tương đối đến các tập tin. Kịch bản trên đang chạy từ một vị trí trung gian, vì vậy tôi không nhận được các đường dẫn đầy đủ trong @relpathbiến.

Ngoài ra tôi đang nhận được báo giá trong các dòng kết quả, mà tôi muốn loại bỏ.

Tôi muốn có được đường dẫn tuyệt đối đến các tệp đó với một vài thay đổi mã nhất có thể, nếu một biến toàn cục có sẵn có thể được sử dụng trong mã của tôi thì tốt nhất cho tôi, vì tôi không phải là người viết theo lô Windows.

Câu trả lời:


3

Tôi không nhận được đầy đủ các đường dẫn trong @relpathbiến.

Ngoài ra tôi đang nhận được báo giá trong các dòng kết quả, mà tôi muốn loại bỏ.

Tệp bó sau đây thực hiện những gì bạn muốn:

@echo off
setlocal enableDelayedExpansion
for /f %%G in ('forfiles /s /m *.phtml /c "cmd /c echo @path"') do (
  set _name=%%G
  rem strip the quotes
  echo !_name:~1,-1! >> listoffiles.txt
  )
endlocal
exit

Ghi chú:

  • Sử dụng @path(Đường dẫn đầy đủ của tệp) thay vì @relpath(Đường dẫn tương đối của tệp).
  • Sử dụng một substringbiểu thức biến để loại bỏ dấu ngoặc kép ( :~1,-1loại bỏ các ký tự đầu tiên và cuối cùng khỏi chuỗi biến).
  • Sử dụng setlocal EnableDelayedExpansionđể các biến được cập nhật chính xác trong forvòng lặp.

Đọc thêm

  • Một chỉ mục AZ của dòng lệnh Windows CMD - Một tài liệu tham khảo tuyệt vời cho tất cả những thứ liên quan đến dòng cmd của Windows.
  • enableelayed mở rộng - Mở rộng bị trì hoãn sẽ khiến các biến được mở rộng tại thời điểm thực hiện thay vì tại thời điểm phân tích.
  • for / f - Lệnh loop đối với kết quả của lệnh khác.
  • forfiles - Chọn một tệp (hoặc bộ tệp) và thực hiện lệnh trên mỗi tệp. Xử lý hàng loạt.
  • biến - Trích xuất một phần của biến (chuỗi con).
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.