在批处理脚本中查找最新文件

时间:2013-08-02 04:28:46

标签: batch-file

我必须在目录中找到最新的文件。我使用下面的代码适用于最近的文件,但我的问题是有两个文件生成相同的时间戳,例如。

  1. s_dss_000GJ00I0000000000IW_9_error.csv
  2. s_dss_000GJ00I0000000000IW_8_1_2013_14_10_standard_error.csv
  3. 我的代码是:

    for /f "delims=" %%x in ('dir /od /a-d /b %1') do set recent=%%x
    

    这里我将%1%参数作为s_dss_000GJ00I0000000000IW_9*.csv传递给查找最新文件。此代码将最新文件作为s_dss_000GJ00I0000000000IW_8_1_2013_14_10_standard_error.csv返回,但我希望最新的文件为s_dss_000GJ00I0000000000IW_9_error.csv

    你可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

不确定您问题中的一些内容。如果您想要的文件名中有一个已知的短语,您可以使用find过滤它,如下所示:

for /f "delims=" %%x in ('dir /od /a-d /b ^| find /i "_9_error"') do set recent=%%x

注意^允许使用管道。

如果文件包含已知内容,您可以使用find同样找出要使用的内容。如果文件名和内容都没有要过滤的内容,并且时间戳相同,那么你就会被卡住。

答案 1 :(得分:0)

我创建了以下批处理脚本来解决我的问题。唯一的问题是复制命令。

我想复制带有不同名称的文件名。这不起作用。 例如需要将s_dss_000GJ00I0000000000IW.csv复制为AAA.csv。

@ECHO OFF
setlocal EnableDelayedExpansion
set j=0
SET logdirectory=C:\batchfiles\error
SET logdirectoryBackup=C:\batchfiles\error_processing\
cd "%logdirectory%

FOR /f "delims=" %%i IN ('dir /b /a-d /o-d s_dss_000GJ00I0000000000IW*.csv') DO (
set /A j=j+1
echo !j!

set tst=%%i
set tst=!tst:standard=!
if not !tst!==%%i ( 
echo %%i contains standard
) else (

echo f|xcopy %%i "%logdirectoryBackup%"AAA.csv /Y
echo %%i not contains standard

)
if !j! geq 2 (

    goto :end
)

)
:end
pause