@ECHO OFF
SETLOCAL
SET "sourcedir=c:\sourcedir"
SET "filename="
FOR /f "delims=" %%a IN (
'dir /s /b /a-d "%sourcedir%\neo.7z" '
) DO SET "filename=%%a"&set "dirname=%%~dpa"&goto found1
ECHO NOT found!
GOTO :eof
:found1
FOR /f "delims=" %%a IN (
'dir /s /b /a-d "%sourcedir%\neo.7z" '
) DO IF /i "%dirname%" neq "%%~dpa" FOR /f %%s IN ('XCOPY /y /L /D "%filename%" "%%~dpa"') DO IF "%%s"=="0" SET "filename=%%a"&set "dirname=%%~dpa"&goto found1
ECHO latest file is "%filename%"
GOTO :EOF
상황에 맞게 sourcedir
설정을 변경해야합니다.
필자는 테스트를 위해 neo.7z
이라는 파일을 사용했습니다. 사용자가 설명하는 상황에서 고정 된 파일 이름을 가져야한다고 생각합니다. * .exe 파일로 의심의 여지가 없습니다.
매우 보행자이지만 일을 할 것입니다.
기본적으로 필요한 디렉토리 트리에 필요한 이름이있는 파일을 찾아 디렉토리에 dirname
이라는 이름을 기록합니다.
해당 파일 이름을 기본 파일로 사용하여 xcopy
일치하는 다른 모든 파일 이름으로 시도하십시오. 목록 전용으로는 /L
플래그를 사용하고 사용자 개입을 제거하려면 /y
플래그를 사용하십시오. 반환 값이 1 file(s) copied
인 경우 첫 번째 토큰 만 %%s
으로 선택된 f이면 선택한 파일이 나중에 있습니다. 0 file(s) copied
은 %%s
을 0
으로 설정합니다. 즉, 선택한 파일이 더 빠름을 의미하므로 최신 파일과 디렉토리 이름을 선택하고 다시 시작하십시오.
나는 속도를 높이기 위해 사용자 운동을 떠날 것입니다. (제안 관심이있는 경우 : delayedexpansion, 서브 루틴 및 유지 - 새로운 시작점을)
개정 [약 5 배 빠른]
@ECHO OFF
SETLOCAL
SET "sourcedir=c:\sourcedir"
SET "filename="
FOR /f "delims=" %%a IN (
'dir /s /b /a-d "%sourcedir%\neo.7z" '
) DO SET "candidate=%%a"&CALL :latest
ECHO latest file is "%filename%"
GOTO :eof
:latest
IF NOT DEFINED filename GOTO selectnew
FOR /f %%s IN ('XCOPY /y /L /D "%filename%" "%candidate%"') DO IF "%%s"=="1" goto :eof
:selectnew
SET "filename=%candidate%"
GOTO :EOF
이 개정 반복적 디렉토리 검색을 방지 할 수 있습니다. 일치하는 각 파일 이름에 대해 xcopy /L
메소드를 사용하여 새로 발견 된 파일을 이전에 발견 된 파일과 비교하고 새 파일이 나중에있는 경우 새 후보를 선택하십시오. 일치하는 이름이 모두 테스트 될 때까지 계속하십시오.
오, 피곤합니다. 내 나쁜 –