在目录中查找具有特定扩展名的最近修改的文件

Find the most recently modified file with a specific extension in a directory

我正在尝试编写 Windows 批处理文件以在目录中查找最新的 *.CPP 文件。

要查找当前目录中的最新文件,此方法有效:

@echo off
for /F "delims=" %%f in ('dir   /b /od /a-d "%*" ') do set File=%%f
echo %*\%File%
pause

但它只显示目录的最新文件

我只想关注目录中所有文件中的 *.CPP 个文件。

如果不可能,也许可以从DIR命令中排除*.TXT*.BAT*.EXE文件的方法,*(因为它主要是这3种与我的 cpp 文件相比,修改日期总是更新的文件。

哦,我注意到斯蒂芬在几天前的上一个问题中发表了一条非常有用的评论:在互联网搜索引擎上搜索 CMD 而不是 DOS

奇迹是我的 duckduckgo 发现了这个: Get newest file in directory with specific extension

所以这就是答案! (归功于 Mofi)

FOR /F "eol=| delims=" %%I IN ('DIR *.CPP /A-D /B /O-D /TW 2^>nul') DO (
SET NewestFile=%%I
GOTO FoundFile
)
ECHO No *.CPP file found!
GOTO :EOF

:FoundFile
ECHO Newest *.CPP file is: %NewestFile%

pause

如果有人需要相同的代码来查找目录中其他特定的最新文件,只需根据需要更改三个 CPP 参数

我刚刚意识到我需要的信息不仅是目录中最新 CPP 文件的名称的 ECHO,还有它的日期,如果我找到如何做我会在这里更新它,如果没有这里仍然需要帮助^^ 编辑:好的再次找到它感谢这个♥很棒的网站♥

FOR /F "eol=| delims=" %%I IN ('DIR *.CPP /A-D /B /O-D /TW 2^>nul') DO (
SET NewestFile=%%I
SET NewestFileDate=%%~tI
GOTO FoundFile
)
ECHO No *.CPP file found!
GOTO :EOF

:FoundFile
ECHO Newest *.CPP file is: %NewestFile% %NewestFileDate%

pause

CMD批处理文件很有意思!!!但是对于新手来说如何正确的写出来也是非常费时间的^^

这是 cmdWindows batch-file 运行 中完成此操作的另一种方法。将 *.txt 更改为 *.cpp 或您喜欢的任何内容。如果您使用的是受支持的 Windows 系统,则可以使用 PowerShell。

@powershell -NoLogo -NoProfile -Command ^
    Get-ChildItem -File -Filter *.txt ^| ^
        Sort-Object LastWriteTime -Descending ^| ^
        Select-Object -First 1 -Property Name,LastWriteTime ^| ^
        ForEach-Object { \"Newest .txt file is $($_.Name) at $($_.LastWriteTime)\" }

用法示例:

21:05:48.58  C:\Users\lit\Documents
C:>\src\t\mostrecentfile.bat
Newest .txt file is developer-onboarding.txt at 09/07/2021 10:34:40