如何在不使用FOR循环的目录中获得最新的文件?



我正在尝试编写一个批处理文件,该文件返回目录中最新的文件,而不使用for循环。我试了很多次,但是没有用。

那么有没有一种方法,我们可以得到最近的文件,而不使用for循环?

@echo off  
cd D:Applications  
for /f "delims=" %%i in ('dir /b/a-d/od/t:c') do set RECENT="%%~nxi"  
echo ..... starting jar........  
start java -jar %RECENT%  
echo ....jar started.....  
exit 0

执行在java开始时卡住,它没有进入下一行或退出0。

可以使用以下代码使用FOR命令:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
cd /D "D:Applications" 2>nul || (echo ERROR: Directory D:Applications does not exist.& goto EndBatch)
for /F "eol=| delims=" %%i in ('dir /A-D /B /O-D /TC 2^>nul') do set "RECENT=%%i" & goto StartJava
echo WARNING: Could not find any file in directory: "%CD%"& goto EndBatch
:StartJava
if exist %SystemRoot%System32where.exe %SystemRoot%System32where.exe java.exe >nul 2>nul
if errorlevel 1 echo ERROR: Could not find java.exe. Check environment variable PATH.& goto EndBatch
echo ..... Starting jar .....
start "Running %RECENT%" java.exe -jar "%RECENT%"
if not errorlevel 1 echo ..... jar started .....
:EndBatch
if errorlevel 1 echo(& pause
endlocal

代码中还添加了一些错误处理。

请注意,创建日期是文件在当前目录下创建的日期。因此,如果一个文件从目录X复制到目录Y,它的最后一次修改日期没有被修改,但该文件在目录Y中有一个新的创建日期,比它的最后一次修改日期更新。

要了解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并完整而仔细地阅读显示的每个命令的帮助页。

  • cd /?
  • dir /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • set /?
  • setlocal /?
  • start /?
  • where /?

参见:

  • 单行多命令使用Windows批处理文件
  • DosTips论坛主题:ECHO。不能给出文本或空行-使用ECHO/
  • 代替
  • 为什么在命令行上使用'set var = text'后没有'echo %var%'的字符串输出?

我不知道为什么你不想在cmd中使用最强大的命令,但为了回答你的问题:

dir /o-d /b "C:my folder*" >tmp
<tmp set /p "latest="
del tmp
echo the latest file is %latest%

最新更新