Bạn chỉ có thể trích xuất đường dẫn và tên tệp từ (1) tham số của chính BAT %1
hoặc (2) tham số CALL %1
hoặc (3) biến cục bộ FOR %%a
.
trong HELP CALL
hoặc HELP FOR
bạn có thể tìm kiếm thông tin chi tiết hơn:
% ~ 1 - mở rộng% 1 loại bỏ bất kỳ dấu ngoặc kép xung quanh (")
% ~ f1 - mở rộng% từ 1 tới một đầy đủ tên đường dẫn
% ~ d1 - mở rộng% từ 1 tới một ký tự ổ đĩa chỉ
% ~ p1 - mở rộng% từ 1 tới một con đường duy nhất
% ~ n1 - mở rộng% từ 1 tới một tên tập tin chỉ
% ~ x1 - mở rộng% từ 1 tới một phần mở rộng tập tin chỉ
% ~ s1 - con đường mở rộng chứa tên ngắn chỉ
% ~ a1 - mở rộng% từ 1 tới tập tin thuộc tính
% ~ t1 - mở rộng% từ 1 tới ngày/giờ của tập tin
% ~ z1 - mở rộng% từ 1 tới kích thước của tập tin
Và sau đó hãy thử như sau:
Hoặc vượt qua chuỗi để được phân tích như một tham số để một CALL
call :setfile ..\Desktop\fs.cfg
echo %file% = %filepath% + %filename%
goto :eof
:setfile
set file=%~f1
set filepath=%~dp1
set filename=%~nx1
goto :eof
hoặc tương đương, vượt qua tên tập tin như một địa phương CHO biến
for %%a in (..\Desktop\fs.cfg) do (
set file=%%~fa
set filepath=%%~dpa
set filename=%%~nxa
)
echo %file% = %filepath% + %filename%
Nguồn
2013-03-22 10:33:08
có thể trùng lặp của [Làm thế nào để phân chia các tên tập tin từ một đường dẫn đầy đủ trong hàng loạt?] (http://stackoverflow.com/questions/9252980/how-to-split-the-filename-from-a-full-path-in-batch) – iTayb