답변:
%%~nf
에 대한 참조에 설명 된 대로만 파일 이름을 얻는 데 사용할 수 있습니다 for
.
@echo off
for /R "C:\Users\Admin\Ordner" %%f in (*.flv) do (
echo %%~nf
)
pause
다음과 같은 옵션을 사용할 수 있습니다.
수정 자 설명이있는 변수 % ~ I 주변을 제거하는 % I를 확장합니다 인용 부호 (""). % ~ fI % I을 완전한 경로 이름으로 확장합니다. % ~ dI % I을 드라이브 문자로만 확장합니다. % ~ pI % I를 경로로만 확장합니다. % ~ nI % I을 파일 이름으로 만 확장합니다. % ~ xI % I을 파일 확장자로만 확장합니다. % ~ sI 짧은 이름 만 포함하도록 경로를 확장합니다. % ~ aI % I을 파일의 파일 속성으로 확장합니다. % ~ tI % I를 파일의 날짜와 시간으로 확장합니다. % ~ zI % I을 파일 크기로 확장합니다. % ~ $ PATH : I PATH 환경에 나열된 디렉토리를 검색합니다 변수를 % I을 정규화 된 이름으로 확장합니다. 첫 번째 발견. 환경 변수 이름이 정의되지 않았거나 검색에서 파일을 찾을 수 없습니다. 이 수정자는 빈 문자열로 확장됩니다.
%1
에는 배치 스크립트의 param 에서 확장자가없는 파일 이름을 가져 왔습니다 . echo %~n1
내가 쫓아 온 것이 었습니다.
변수가 보유한 파일이 실제로 존재하지 않으면 FOR
접근 방식이 작동하지 않습니다. 확장의 길이를 알고 있다면 사용할 수있는 트릭은 하위 문자열을 취하는 것입니다.
%var:~0,-4%
-4
수단 (아마도 마지막 4 자리한다는 .ext를는 ) 절단한다.
echo %f:~0,-4%
질문에 사용 된 예제의 맥락에서 시도 할 때 오해 할 수 있습니다. 내가 뭘 잘못하고 있죠?
SET fl=%%f
와 관련하여 작동합니다.echo %fl:~0,-4%
이것은 매우 늦은 응답이지만 DiskInternals LinuxReader에서 NTFS가 아닌 디렉토리 (FAT32) 디렉토리에 저장된 파일에 '.efs_ntfs'를 추가하는 특정 문제를 해결하기 위해이 문제를 해결했습니다.
@echo off
REM %1 is the directory to recurse through and %2 is the file extension to remove
for /R "%1" %%f in (*.%2) do (
REM Path (sans drive) is given by %%~pf ; drive is given by %%~df
REM file name (sans ext) is given by %%~nf ; to 'rename' files, move them
copy "%%~df%%~pf%%~nf.%2" "%%~df%%~pf%%~nf"
echo "%%~df%%~pf%%~nf.%2" copied to "%%~df%%~pf%%~nf"
echo.
)
pause
.encrypted
몸값 요구와 함께 모든 파일에 추가 한 내 친구에게 도움이되었습니다 . 분명히 공격하는 스크립트는 이것과 반대 인 배치 파일이어야 .encrypted
하고 모든 파일에 추가 된 것이어야 합니다.
디렉토리에서 기존 파일을 반복하지 않고 변수에서 확장을 간단히 제거하려는 경우 이것을 사용하고 있습니다.
for %%f in ("%filename%") do set filename=%%~nf
전체 경로에서 확장을 제거하려면 %%dpnf
대신 다음을 사용하십시오 .
for %%f in ("%path%") do set path=%%~dpnf
예:
(콘솔에서 직접 사용)
@for %f in ("file name.dat") do @echo %~nf
@for %f in ("C:\Dir\file.dat") do @echo %~dpnf
OUTPUT:
file name
C:\Dir\file
C:\Users\Admin\Ordner\foo.flv
및 %% ~ NF는 당신을 줄 것입니다foo
. 확장명을 제외한 모든 것을 원한다면 %% ~ df %% ~ pf %% ~ nf 를 사용하십시오C:\Users\Admin\Ordner\foo