Windows 명령 줄에서 경로없이 파일 이름 만 얻는 방법은 무엇입니까?


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

전체 경로와 함께 출력 파일 이름을 제공합니다.

\path\to\dir\<filename>

<filename>경로를 포함하지 않고 어떻게하면 됩니까? 그 'filename'문자열을 사용해야합니다.

또한 파일 이름을 얻은 후에 다음을 수행 할 수 있습니까?

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

3
나중에 참조 할 수 있도록 Microsoft에는 온라인 Windows XP-명령 줄 참조 AZ 가 있으며 이후 버전에도 여전히 적용됩니다. 수락 한 답변의 설명서는 for명령 섹션의 끝에 있습니다.
martineau

@martineau : 불행히도 온라인 'Windows XP-명령 줄 참조 AZ'페이지는 더 이상 온라인으로 제공되지 않으며 (Microsoft에서 제거)이 설명서에 대한 대안을 아직 사용할 수 없습니다 ( ' % ~ '인수 문서)
PapaAtHome

@PapaAtHome : 다행히도 web.archive.org의 wayback machine을 통해 명령 행 참조를 볼 수 있습니다 .
martineau

답변:


54

사용 %~nxf을 위해 <filename>.<extension>.

그리고 네, 당신은 할 수 있습니다 :

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

참조 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 : \ code \ myapp \ .git \ somefolder에 ".git"이라는 텍스트가 포함되어 있는지 알고 싶습니다.
데일 바 나드

1
경로를 find또는 findstr명령 으로 파이프 ( 예 : echo %%f | find "\.git\" > NUL또는) echo %%f | findstr /R /C:"\\\.git\\" /C:"\\\.git\>" > NUL한 다음 if명령으로 오류 수준을 확인하여 텍스트 또는 정규식 검색을 수행 할 수 있습니다 . (findstr 정규식은 매우 제한되어 있으므로 선행 \및 [ \문자열 의 끝 또는 끝] 을 시행하려는 시도입니다 ). 참고 수행 if errorlevel가을-를 통해 함께 단점을 가지고, 그리고 당신은 아마 수없는 if %errorlevel%루프 내에서 당신이해야 할 수도 있으므로 SetLocal EnableDelayedExpansion먼저하고 if !errorlevel!대신.
Bob

@DaleBarnard 또한 PowerShell 사용을 고려하십시오. 고통이 훨씬 적고 일관된 결과 일 수 있습니다.
Bob

blah blah는 나를 혼란스럽게 만들고 있습니다. 그것이 무엇을 나타내는 것입니까? 파일의 전체 경로와 추출 된 파일 이름이이 답변에 어떻게 맞습니까?
thebunnyrules

@thebunnyrules %~nxf는 첫 번째 문장에서 말한 것처럼 파일 이름입니다. 배치 파일 내에서 사용할 때는을 두 배로 %만들어야합니다 %%~nxf. 는 blah blah blah단지 문제의 예를 복용하고 대체 filename와 비트를 %%~nxf대체 - blah의는 필러이며, 특별한 의미가 없습니다.
Bob

0

나는 아직 언급 할 수는 없지만 혼란을 피하기 위해 다음 사항에주의해야한다고 생각합니다.

fFOR 변수 이름으로 사용할 수 있지만 다른 문자를 사용하여 형식 문자 f(Bob의 답변에 명시된대로 전체 경로 이름을 반환 함) 와 혼동하지 않도록 하거나 최소한 대문자를 사용하는 것이 가장 좋습니다 F.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.