1

我有这个简单的批处理脚本:

@echo off
dir /o-d "K:\DIR\DIR\*.exe" > "D:\Logs\Files.txt"

它按日期显示 txt 中的所有文件。

我的问题是:我怎样才能让它按日期只显示最后一个文件而不是该特定目录中的所有文件?

提前致谢。

4

4 回答 4

2

检索最后一行

如果你只对最后一个文件感兴趣,你可以这样做:

@echo off
for /f "tokens=*" %%a in ('dir /o-d "K:\DIR\DIR*.exe" ^| findstr /C:"/"') do set last=%%a
echo %last%

dir这仅显示命令输出中的最后一个文件名。如果要将其重定向到文件,请替换echo %last%为:

echo %last% > "D:\Logs\Files.txt"

检索第一行

如果您对第一个文件感兴趣,则需要将代码稍微更改为:

for /f "tokens=*" %%a in ('dir /o-d "K:\DIR\DIR*.exe" ^| findstr /C:"/"') do set first=%%a && goto Done
:Done
echo %first%

同样,如果您有兴趣将其重定向到文件,请替换echo %first%为:

echo %first% > "D:\Logs\Files.txt"
于 2012-09-19T10:56:09.670 回答
1
@echo off
setlocal 
for /f "delims=" %%F in ('dir /b /o-d') do (
  set file=%%~nxF %%~tF
  goto display
)
:display
echo %file%

笔记:

  • 要理解for和“解密” %%~nxF %%~tF,请阅读for帮助(help for从命令行)
  • goto是否只是在第一个(最新)文件/目录之后打破循环。
  • 要重定向到文件,请重定向批处理本身 ( batch.bat >myFile) 或最后回显 ( echo %file% > myFile)
  • Dir 默认匹配子目录和文件。仅用于 dir /a-d匹配文件。
于 2012-09-19T10:45:23.320 回答
0

只获取最新文件的文件名

@echo off
for /f "tokens=*" %%x in ('dir /b /o-d "K:\DIR\DIR\*.exe"') do (
    echo %%x
    exit /b 0
)
于 2012-09-25T13:23:04.547 回答
0

我认为使用 shell/batch 命令是不可能的。

您可以编写另一个程序来选择 Files.txt 文件的第一行

于 2012-09-19T10:16:35.090 回答