批处理文件以获取文件名包含子字符串的最新文件

时间:2014-09-23 13:06:42

标签: windows batch-file command-line

我尝试编写批处理文件以从日志文件中打开最新的会话日志。

我有一个bash脚本,它将完全按照我的意思在linux上执行,通过按时间顺序列出我的logs文件夹的内容,grep用于以Session开头并使用最新的行。之后,它会将其附加到文件路径并打开它。 bash脚本的代码如下:

mostRecentLogFile=~/my/logs/folder/$(ls -t ~/my/logs/folder | grep ^Session | head -1)
displayFunction="gedit"
echo "Opening $mostRecentLogFile ..."
$displayFunction $mostRecentLogFile

但是我基本上需要将此脚本转换为批处理文件,以便在Windows上执行相同的操作。

我可以在logs文件夹中打开最近的文件,但是还有其他类型的日志文件,我需要获得最新的文件字符串" Session"所以这段代码并不总是打开正确的文件:

cd my\logs\folder
FOR /F %%I IN ('DIR *.* /B /O:-D') DO notepad.exe %%I

有关如何编辑此代码以过滤包含子字符串的文件名的任何建议,我们将不胜感激。

1 个答案:

答案 0 :(得分:2)

这可能不是最好的方法,但似乎有效

FOR /F %%I IN ('DIR *.* /B /O:D') DO echo %%I |>nul findstr /B "Session" && set logfile=%%I
notepad.exe %logfile%

不是按相反顺序排序(最新的第一个),而是按标准顺序排序(最早的第一个),因此%logfile%的最终赋值是以“Session”开头的最新文件名。在第一行%logfile%包含日志文件的文件名后,第二行只打开它。

修改

根据您的确切用例,似乎可以缩短

之类的内容
FOR /F "delims=" %%I IN ('DIR Session* /B /O:D /A:-D') DO set "logfile=%%I"
notepad "%logfile%"