Điều này làm việc cho tôi, nếu bạn đặt như sau trong một tệp CMD:
@echo off
SETLOCAL EnableDelayedExpansion
for /f "usebackq delims=" %%A in (`cmd /c dir /s /b`) DO (
set NAME=%%A
set SHORT=!NAME:%cd%\=!
echo.!SHORT!
)
Nó nhận đầu ra của dir
lệnh ban đầu của bạn và sử dụng thay thế chuỗi để loại bỏ thư mục hiện tại. Xem set /?
để biết thêm thông tin về điều này. Nếu bạn muốn chuyển thư mục làm đối số thay vì sử dụng thư mục hiện tại, hãy thử sửa đổi các biến này:
@echo off
SETLOCAL EnableDelayedExpansion
for /f "usebackq delims=" %%A in (`cmd /c dir /s /b %1`) DO (
set NAME=%%A
set SHORT=!NAME:%~1\=!
echo.!SHORT!
)
Cảnh giác với tên tệp và thư mục có dấu chấm than trong tên tệp, vì chúng có xu hướng bị loại bỏ bằng phương pháp này. Nếu bạn cần một cái gì đó mạnh mẽ hơn có thể xử lý việc này, hãy xem xét việc cài đặt GNU sed hoặc grep . Bạn cũng có thể điều tra bằng cách sử dụng lệnh tìm GNU nếu bạn không bận tâm tên tệp quay lại kiểu UNIX bằng dấu gạch chéo thay vì dấu gạch chéo ngược và dẫn đầu ./
trước mỗi mục.
Ngoài ra còn có một câu trả lời khác có thể cung cấp cho bạn ý tưởng về việc xử lý dấu chấm than trong quá trình xử lý CMD: https://stackoverflow.com/questions/32873578/how-to-read-a-opes-with-from-a-file-in- windows-batch-script / 32874195 # 32874195