2014-10-31 85 views
1

有人可以帮助我使用windows批处理脚本处理下面解释的特定情况。批处理脚本:用递增的文件扩展名识别最新文件

我们有一个共享文件夹,由第三方应用程序工具(OBIEE)用作版本控制文件夹。在该文件夹中,该工具创建具有递增分机号码的备份文件。

例如:如果我们有一个代码文件Projects.rpd,我们第一次签出这个文件,该工具创建Projects.000作为备份文件。下一次会是Projects.001,然后是Projects.002等等。

在批处理脚本中,我需要获取最新备份文件的文件名。在这个例子中,Projects.002

我不能去与最新的时间戳的文件,因为最新的备份(Projects.002),最新的代码文件(Projects.rpd),另一个控制文件将始终具有相同的时间戳。

如何识别此场景中的最新备份文件

回答

1
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
SET "latest=" 
FOR /f %%a IN ('dir /b /a-d /on "%sourcedir%\projects.*"') DO (
IF /i "%%~xa" leq ".A" SET "latest=%%~xa" 
) 
ECHO %latest% 
SET "latest=%latest:~1%" 
ECHO latest is "%latest%" 
GOTO :EOF 

您需要更改sourcedir的设置以适合您的情况。

发布“其他控制文件”的名称真的很有帮助。我不得不假设它被称为report.somethingelse,其中somethingelse是字母。

+0

取而代之的是'IF'声明,我会更舒服的扩展正则表达式匹配3个十进制数字,例如''DIR/b/a-d/on'%sourcedir%\ projects。*“^ | findstr/r“\。[0-9] [0-9] [0-9] $”''。你怎么看? – eryksun 2014-11-01 01:40:02

+0

但你感觉。没有足够的关于'project。*'文件配置的信息,但是你的mod可以工作,尽管由于管道的原因会慢一点。 – Magoo 2014-11-01 03:01:59

0

只需插入这条线在批处理文件:

for /L %%i in (0,1,9) do for %%a in (Projects.%%i*) do set "latestBackup=%%a"