BATCH文件通过比较文件名上的字符串和日期+时间来移动文件

时间:2015-09-16 13:38:18

标签: batch-file

我有两个文件夹。

folder1:C:\one\firstfolder
文件:
111-YYYYMMDD-HHMMSSms
222-YYYYMMDD-HHMMSSms
或前3位数字和日期和时间的任何值。

folder2:C:\two\secondfolder
文件:
111-YYYYMMDD-HHMMSSms
222-YYYYMMDD-HHMMSSms
或前3位数字和日期和时间的任何值。

我的要求是将第二个文件夹文件与第一个文件夹文件进行比较。

(如果两个文件中的前三位数代码相同,则folder1文件时间戳位于folder2文件时间戳之前,无需处理文件)
 否则
((如果没有folder1中的文件)或(如果前三位数代码相同且folder1文件时间戳位于folder2文件时间戳之后,我们需要将这些文件移动到名为C:\ two \ secondfolder \ work)的其他文件夹中)。

1 个答案:

答案 0 :(得分:0)

这也应该适应文件名的第一部分有超过1个文件的情况。

但它未经测试:

@echo off
set "target=C:\two\secondfolder\work"
set "source1=C:\one\firstfolder"
set "source2=C:\two\secondfolder"
if exist "%source2%\*-*" dir "%source1%" /b /a-d >nul 2>&1 || move "%source2%\*-*" "%target%\" >nul
for /f "tokens=1-2,* delims=-" %%a in ('dir "%source1%\*-*" /b /a-d ') do (
  for /f "tokens=1-2,* delims=-" %%x in ('dir "%source2%\%%a-*" /b /a-d ') do (
      if %%b%%c GTR %%y%%z (
         if exist "%source1%\%%a-%%b-%%c" move "%source1%\%%a-%%b-%%c" "%target%\" >nul
         move ""%source2%\%%x-%%y-%%z" "%target%\" >nul
      )
  )
)
pause