批量编程:根据修改日期将文件移动到文件夹

时间:2014-01-03 22:48:19

标签: batch-file

感谢您的光临。我的问题:我收到的每日文件存储为.csv,通常采用以下格式:DEVICE_DEVICENumber_DateID。我想根据DateID的Date部分将这些文件移动到各自的月度文件夹(即201401)中。 DateID首先写为日期,后跟唯一的设备ID(例如YYYYMMDDUNIQUEID - 2014010110)。

如果我创建类似上面提到的文件夹(即201401,201402,201403等),是否有一种简单的方法来拉动字符串的一部分以匹配我要将文件定向到的文件夹? / p>

感谢您的帮助!

Calbruin

典型文件名:

GO.YO_WTR_SOO5_PT_20140102110.csv

1 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=.\csvfiles"
SET "destdir=c:\destdir"
FOR /f "delims=" %%a IN ('dir /b /a-d "%sourcedir%\*.csv" ') DO (
 SET "csvname=%%~na"
 IF NOT "!csvname:*_=!"=="!csvname!" (
  CALL :finddate
  ECHO MD "%destdir%\!csvname!"
  ECHO MOVE "%sourcedir%\%%a" "%destdir%\!csvname!\"
 )
)

GOTO :EOF
:finddate
IF /i "%csvname:~-6%"=="_audit" SET "csvname=%csvname:~0,-6%"
IF "%csvname:*_=%"=="%csvname%" SET "csvname=%csvname:~0,6%"&GOTO :EOF 
SET "csvname=%csvname:*_=%"
GOTO finddate

当应用于内容

的目录'。\ csvfiles`时
GO.YO-WTR-SOO5-PT-20140102110.csv
GO.YO_WTR_SOO5_PT_20140102110.csv

制作输出

MD "c:\destdir\201401"
MOVE ".\csvfiles\GO.YO_WTR_SOO5_PT_20140102110.csv" "c:\destdir\201401\"

所需命令仅用于ECHO以用于测试目的。在确认命令正确后,将ECHO MD更改为MD以实际创建目录。附加2>nul以禁止显示错误消息(例如,当目录已存在时) 将ECHO MOVE更改为MOVE以实际移动文件。附加>nul以取消报告消息(例如1 file moved


修订 - 调整......_ audit.csv。