我有数千个文件需要移动到修改日期的年份和月份命名的文件夹中。我之前已经成功完成了这项工作,但由于某种原因,它失败了,因为主要的字符串值没有设置。这就是我所拥有的:
包含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>
我在这里想要做些什么?我确定它很简单。也许我太累了,无法接受它。
答案 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