批处理文件,用于将文件从修改日期移动到以年份和月份命名的文件夹

时间:2014-12-29 20:53:05

标签: sorting date batch-file for-loop move

我有数千个文件需要移动到修改日期的年份和月份命名的文件夹中。我之前已经成功完成了这项工作,但由于某种原因,它失败了,因为主要的字符串值没有设置。这就是我所拥有的:

包含3个文件的测试文件夹。所有文件都有很长的名字。如: LOCALID = 99a73-f852d-407907-98ce-4ab02dde5b41_SessionId = 999999.flv

上述文件名代表我正在使用的文件。

它们存在于一个文件夹中:E:\ backups \ test

它们是此文件夹中的唯一项目。

当我运行测试命令时:for / f%a in(" E:\ backups \ test *。*")do set filedate =%〜ta

返回正确的信息:set filedate = 12/29/2014 12:44 PM

我的批处理文件如下所示:

@rem ############################################################
@rem SETTING TIME AND DATE PARAMETERS FOR CREATION OF LOG FILES
set hr=%time:~0,2%
if "%hr:~0,1%" equ " " set hr=0%hr:~1,1%
set outFile=%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%
@rem ############################################################
@rem ############################################################
@rem SETTING PATHS FOR PROCESSING LOG FILES
SETLOCAL ENABLEDELAYEDEXPANSION
SET dir=E:\backups\test
SET logDir=C:\scripts\logs
SET datesort=%logDir%\logfile.name.%outFile%.log
@rem ############################################################
@rem PARSING FILE MODIFIED DATE FOR YEAR AND MONTH
@rem CALLS PROCESS TO SET YEAR AND MONTH
@rem MOVES FILES INTO DATED FOLDERS
@rem ROBOCOPY TAKES CARE OF FOLDER CREATION AUTOMATICALLY
@rem SETS YEAR AND MONTH
FOR /f %%a IN ('dir /b /a-d "%dir%\*.flv" ') DO (
 SET "filedate=%%~ta"
  CALL :finddate
  robocopy "%dir%" /XX /r:10 %dir%\!year!!month!\ "!filedate!" /MOV >> %datesort%
)
GOTO sendmail
:finddate
SET year=%filedate:~6,4%
SET month=%filedate:~0,2%
GOTO :EOF
GOTO finddate
:sendmail
@rem ############################################################
@rem SENDING MAIL NOTIFICATION WITH LOG
<command for sending email notification>

我在这里想要做些什么?我确定它很简单。也许我太累了,无法接受它。

2 个答案:

答案 0 :(得分:0)

您没有说明!filedate!行中robocopy参数应该做什么。

如果没有/mindate:开关(或其他),那么!filedate!将被视为文件规范,我猜你没有名为"12/29/2014 12:44 PM"的文件 - 其中,btw是与%%~ta相同(所以为什么要使用!申请!`?)

答案 1 :(得分:0)

您可以使用for metavariables而不将它们设置为环境变量。

不需要延迟扩展。

@echo off
@rem ############################################################
@rem SETTING TIME AND DATE PARAMETERS FOR CREATION OF LOG FILES
set hr=%time:~0,2%
if "%hr:~0,1%" equ " " set hr=0%hr:~1,1%
set outFile=%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%
@rem ############################################################
@rem ############################################################
@rem SETTING PATHS FOR PROCESSING LOG FILES
SET dir=E:\backups\test
SET logDir=C:\scripts\logs
SET datesort=%logDir%\logfile.name.%outFile%.log
@rem ############################################################
@rem PARSING FILE MODIFIED DATE FOR YEAR AND MONTH
@rem MOVES FILES INTO DATED FOLDERS
FOR /f "delims=" %%a IN ('dir /b /a-d "%dir%\*.flv" ') DO (
  for /f "tokens=1,3 delims=/\. " %%b in ("%%~ta") do (
     md "%dir%\%%c%%b" 2>nul
     move "%dir%\%%a" "%dir%\%%c%%b"
  )
)
@rem ############################################################
@rem SENDING MAIL NOTIFICATION WITH LOG
:: <command for sending email notification>
pause