我必须在目录中找到最新的文件。我使用下面的代码适用于最近的文件,但我的问题是有两个文件生成相同的时间戳,例如。
s_dss_000GJ00I0000000000IW_9_error.csv
s_dss_000GJ00I0000000000IW_8_1_2013_14_10_standard_error.csv
我的代码是:
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
。
你可以帮我解决这个问题吗?
答案 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