我正在尝试编写一个批处理文件,该文件返回目录中最新的文件,而不使用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%