如何在不使用FOR循环的情况下获取目录中的最新文件?

问题描述 投票:0回答:2

我正在尝试编写一个批处理文件,该文件返回目录中的最新文件,而不使用

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。

batch-file jar executable-jar
2个回答
2
投票

可以通过命令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%\System32\where.exe %SystemRoot%\System32\where.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 /?

另请参阅:


2
投票

我不确定你为什么不想使用

cmd
中最强大的命令,但为了回答你的问题:

dir /o-d /b "C:\my folder\*" >tmp
<tmp set /p "latest="
del tmp
echo the latest file is %latest%
© www.soinside.com 2019 - 2024. All rights reserved.