Wikipedia의 다음 배치 스크립트가 있습니다.
@echo off
for /R "C:\Users\Admin\Ordner" %%f in (*.flv) do (
echo %%f
)
pause
for 루프에서 확장자가 flv 인 모든 파일이 에코되지만 확장자가없는 파일과 확장자가있는 파일이 필요한 파일로 일부 작업을 수행하려고합니다. 이 두 가지를 어떻게 얻을 수 있습니까?
솔루션을 검색했지만 찾지 못했습니다. 나는 배치의 진정한 초보자입니다 …
답변
%%~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을 정규화 된 이름으로 확장합니다. 첫 번째 발견. 환경 변수 이름이 정의되지 않았거나 검색에서 파일을 찾을 수 없습니다. 이 수정자는 빈 문자열로 확장됩니다.
답변
변수가 보유한 파일이 실제로 존재하지 않으면 FOR
접근 방식이 작동하지 않습니다. 확장의 길이를 알고 있다면 사용할 수있는 트릭은 하위 문자열을 취하는 것입니다.
%var:~0,-4%
-4
수단 (아마도 마지막 4 자리한다는 .ext를는 ) 절단한다.
답변
나는 또한 Windows cmd에 익숙하지 않지만 이것을 시도하십시오.
echo %%~nf
답변
이것은 매우 늦은 응답이지만 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
답변
디렉토리에서 기존 파일을 반복하지 않고 변수에서 확장을 간단히 제거하려는 경우 이것을 사용하고 있습니다.
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
답변
cygwin bash를 사용하여 자르기
:: e.g. FILE=basename.mp4 => FILE_NO_EXT=basename
set FILE=%1
for /f "delims=" %%a in ('bash -c "FILE=%FILE%; echo ${FILE/.*/}" ') do set FILE_NO_EXT=%%a
답변
변수가 인수이면 간단히 %~dpn
인수 번호 를 사용할 수 있으므로 다양한 확장 길이에 대해 걱정할 필요가 없습니다.
예를 들어 %~dpn0
, 확장자가없는 배치 파일의 경로를 반환하고 확장자 %~dpn1
가 %1
없는 등 의 경로를 반환합니다 .