2009-07-08 38 views
32

Tôi đã sau Đối với vòng lặp trong một tập tin batch:Nhận filename trong hàng loạt vòng lặp for

for /R c:\test\src %%i IN (*.*) DO (
MOVE %%i C:\test\destination 
ECHO %%i 
exit 
) 

Kết quả của ECHO kết quả đầu ra các đường dẫn tập tin toàn bộ Ex: C: \ folderName \ Tên tập tôi cần chỉ với ECHO Tên tệp. Có lệnh cụ thể nào cung cấp cho tôi tên tệp không? Cảm ơn!

+6

BTW, nếu bạn đang sử dụng một phiên bản của cửa sổ làm bằng thế kỷ này, nó không phải là DOS mà bạn đang sử dụng, nó là dấu nhắc lệnh của windows. – whatsisname

Trả lời

65

Khi bật tiện ích mở rộng lệnh (Windows XP và mới hơn), bạn có thể sử dụng cú pháp% ~ nF (trong đó F là biến và ~ n là yêu cầu tên của nó) để chỉ lấy tên tệp.

FOR /R C:\Directory %F in (*.*) do echo %~nF 

chỉ nên ghi lại tên tệp.

+13

thêm% ~ xF vào cuối nếu bạn muốn xem phần mở rộng của tệp. – akf

+33

Hoặc% ~ nxf để lấy tên tệp có phần mở rộng. – Helen

+0

IIRC, hầu hết các tiện ích mở rộng đều nằm trong CMD.EXE kể từ ít nhất NT 3.5 và một số trong số đó thậm chí còn có trong bản phát hành beta trước phiên bản của NT. Nhóm NT không thấy lý do gì để bảo toàn tất cả nỗi đau của COMMAND.COM khi xây dựng một phiên bản Windows mới. Tuy nhiên, họ dường như không bận tâm đến nhóm tài liệu về họ trong một thời gian dài. – RBerteig

4

hoặc Chỉ% ~ F sẽ cung cấp cho bạn đường dẫn đầy đủ và tên tệp đầy đủ.

Ví dụ, nếu bạn muốn đăng ký tất cả các tập tin * .ax trong thư mục hiện ....

FOR /R C:. %F in (*.ax) do regsvr32 "%~F" 

này hoạt động khá độc đáo trong Win7 (64bit) :-)

3

Tôi trễ một chút nhưng tôi đã sử dụng điều này:

dir /B *.* > dir_file.txt 

thì bạn có thể tạo vòng lặp FOR đơn giản để trích xuất tên tệp và sử dụng chúng. ví dụ:

for /f "tokens=* delims= " %%a in (dir_file.txt) do (
gawk -f awk_script_file.awk %%a 
) 

hoặc lưu trữ chúng vào Vars (! N1 !,! N2! ..! Nn!) để sử dụng sau này. ví dụ:

set /a N=0 
for /f "tokens=* delims= " %%a in (dir_file.txt) do (
set /a N+=1 
set v[!N!]=%%a 
) 
+0

gawk không khả dụng ở mọi nơi – Li3ro

0

Nếu bạn muốn duy trì cả hai tên file (chỉ) và phần mở rộng, bạn có thể sử dụng %~nxF:

FOR /R C:\Directory %F in (*.*) do echo %~nxF
Các vấn đề liên quan