Làm thế nào để có được tên tệp mà không có đường dẫn trong dòng lệnh windows?


31
for /r %f in (*) do echo %f

Cung cấp tên tệp đầu ra cùng với toàn bộ đường dẫn

\path\to\dir\<filename>

Làm thế nào để tôi có được chỉ là <filename>không có đường dẫn bao gồm? Tôi cần sử dụng chuỗi 'tên tệp' đó.

Ngoài ra, có thể làm như sau không, một khi tên tệp được lấy?

for /r %%f in (*) do (
echo "blah blah blah 'filename'" >> blahblah_filename.txt
)

3
Để tham khảo trong tương lai, Microsoft có Windows XP trực tuyến - Tham chiếu dòng lệnh AZ vẫn chủ yếu áp dụng cho các phiên bản mới hơn. Tài liệu trong câu trả lời bạn chấp nhận nằm ở cuối phần trên forlệnh.
martineau

@martineau: Thật không may, trang 'Windows XP - AZ tham chiếu dòng lệnh' không còn trực tuyến (đã bị microsoft xóa) và một tài liệu thay thế cho tài liệu này vẫn chưa có sẵn (theo như tôi có thể tìm thấy bất kỳ bản mã nào trên ' Tài liệu tranh luận% ~ ')
PapaAtHome

@PapaAtHome: May mắn thay, người ta vẫn có thể xem tham chiếu dòng lệnh thông qua máy quay ngược của web.archive.org .
martineau

Câu trả lời:


54

Sử dụng %~nxfcho <filename>.<extension>.

Và vâng, bạn có thể làm:

for /r %%f in (*) do (
echo "blah blah blah '%%~nxf'" >> blahblah_%%~nxf.txt
)

Xem for /?:

In addition, substitution of FOR variable references has been enhanced.
You can now use the following optional syntax:

    %~I         - expands %I removing any surrounding quotes (")
    %~fI        - expands %I to a fully qualified path name
    %~dI        - expands %I to a drive letter only
    %~pI        - expands %I to a path only
    %~nI        - expands %I to a file name only
    %~xI        - expands %I to a file extension only
    %~sI        - expanded path contains short names only
    %~aI        - expands %I to file attributes of file
    %~tI        - expands %I to date/time of file
    %~zI        - expands %I to size of file
    %~$PATH:I   - searches the directories listed in the PATH
                   environment variable and expands %I to the
                   fully qualified name of the first one found.
                   If the environment variable name is not
                   defined or the file is not found by the
                   search, then this modifier expands to the
                   empty string

The modifiers can be combined to get compound results:

    %~dpI       - expands %I to a drive letter and path only
    %~nxI       - expands %I to a file name and extension only
    %~fsI       - expands %I to a full path name with short names only
    %~dp$PATH:I - searches the directories listed in the PATH
                   environment variable for %I and expands to the
                   drive letter and path of the first one found.
    %~ftzaI     - expands %I to a DIR like output line

In the above examples %I and PATH can be replaced by other valid
values.  The %~ syntax is terminated by a valid FOR variable name.
Picking upper case variable names like %I makes it more readable and
avoids confusion with the modifiers, which are not case sensitive.

Câu trả lời chính xác. Bất kỳ ý tưởng làm thế nào tôi có thể tìm kiếm một chuỗi con trong một đường dẫn đầy đủ? Ví dụ: tôi muốn biết nếu c: \ code \ myapp \ .git \ somefolder có bao gồm văn bản ".git".
Dale Barnard

1
Bạn có thể thực hiện tìm kiếm văn bản hoặc regex bằng cách dẫn đường dẫn vào lệnh findhoặc findstrlệnh, ví dụ echo %%f | find "\.git\" > NULhoặc echo %%f | findstr /R /C:"\\\.git\\" /C:"\\\.git\>" > NULsau đó kiểm tra errorlevel bằng iflệnh. (findstr regex rất hạn chế, vì vậy đó là nỗ lực của tôi trong việc thực thi một đầu \và [hoặc là một \chuỗi hoặc cuối chuỗi]). Hãy lưu ý rằng if errorlevelcó những điều kỳ quặc với thông qua, và có lẽ bạn không thể if %errorlevel%trong vòng lặp nên SetLocal EnableDelayedExpansiontrước tiên bạn có thể cần phải if !errorlevel!thay thế.
Bob

@DaleBarnard Ngoài ra, hãy cân nhắc sử dụng PowerShell - ít đau hơn nhiều và có thể có kết quả phù hợp hơn.
Bob

Blah blah đang làm tôi bối rối, nó được cho là gì? Làm thế nào để đường dẫn đầy đủ của tệp và tên tệp được trích xuất phù hợp với câu trả lời này?
thebunnyrules

@thebunnyrules %~nxflà tên tệp, như tôi đã nói trong câu đầu tiên. Khi bạn sử dụng nó trong một tệp bó, bạn cần tăng gấp đôi %, làm cho nó %%~nxf. Đây blah blah blahchỉ là lấy ví dụ trong câu hỏi và thay thế filenamebit bằng sự %%~nxfthay thế - blahs chỉ là phụ và không có ý nghĩa cụ thể.
Bob

0

Tôi chưa thể bình luận, nhưng tôi tin rằng những điều sau đây cần được lưu ý để tránh nhầm lẫn.

Mặc dù fcó thể được sử dụng làm tên biến FOR, tốt nhất nên sử dụng một chữ cái khác để tránh nhầm lẫn nó với chữ định dạng f(như đã nêu trong câu trả lời của Bob, trả về tên đường dẫn đầy đủ) hoặc ít nhất là sử dụng vốn F.

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.