2014-12-23 7 views
0
set var=C:\Users\user\Desktop\bla\bla.exe 
set var=%var:*\% 
echo %var% 

이렇게하면 Users \ user \ Desktop \ bla \ bla.exe가 반환됩니다. 마지막 \에 초점을 맞출 수있는 방법이 있습니까? 그래서 그냥 bla.exe를 반환 할 수 있도록 첫 번째? 이 파일은 여러 파일과 폴더에 사용되므로 하위 폴더가 몇 개인 지 항상 알 수는 없습니다.일괄 처리 % var : * % 먼저 마지막으로 not를 제거하기 전에

답변

1

다음 스 니펫은이를 수행하는 한 가지 방법을 보여줍니다.

@setlocal enableextensions enabledelayedexpansion 
    @echo off 

:main 
    set var=C:\Users\user\Desktop\blah blah\yada yada.exe 
    call :basename result "%var%" 
    echo %result% 

    endlocal 
    goto :eof 

:basename 
    set %1=%~nx2 
    goto :eof 

그것은 기본적으로 전체 이름과에 기본 이름을 할당 할 변수를 전달합니다 (UNIX 유틸리티의 이름을 따서 명명) 함수 basename를 호출, 당신은 당신이 포함 된 파일 이름 않도록 적절하게 인용 있는지 확인해야합니다 공백으로 인해 문제가 발생할 수 있습니다.

가변 수정 자의 전체 집합은 call /? 도움말 출력에서 ​​볼 수 있습니다.


또는, 한 줄 for 문에서 같은 basename 기능을 사용할 수 있습니다 : 이것은 당신이 함수를 호출 할 필요없이 기본 이름 을 얻을 수 있습니다

for /f "delims=" %%I in ("%var%") do set result=%%~nxI 

. 나는 그것이 더 읽기 이후 기능에게 자신을 선호하는 경향이 있지만, 당신은 아마 주석을 포함하여 해당을 완화 할 수 :

rem Get base name of var into result: 
rem eg: var = C:\Users\user\Desktop\blah blah\yada yada.exe 
rem  result = yada yada.exe 

for /f "delims=" %%I in ("%var%") do set result=%%~nxI 
+0

이것은 2의 가장 단순한 방법 이었지만 어떻게 작동하는지 알았지 만 for dir 루프를 사용하여 전환했습니다. – BoKa1337

2
@ECHO OFF 
SETLOCAL 
set "var=C:\Users\user\Desktop\blah blah\bla.exe" 
FOR %%a IN ("%var%") DO (
SET "filename=%%~nxa" 
FOR %%b in ("%%~dpa.") DO SET "lastleaf=%%~nxb" 
) 
ECHO filename is "%filename%" 
ECHO lastleaf is "%lastleaf%" 
GOTO :EOF 

보통을, 다음 질문은 디렉토리 - 마지막 잎을 구하는 방법에 대한입니다 나무. 서브 루틴이 필요하지 않습니다 ...

구분 기호 문제를 최소화하기 위해 따옴표를 배치하십시오. 또한 사소한 디렉토리 이름 변경으로 차이점을 나타냅니다.