感谢您的光临。我的问题:我收到的每日文件存储为.csv,通常采用以下格式:DEVICE_DEVICENumber_DateID。我想根据DateID的Date部分将这些文件移动到各自的月度文件夹(即201401)中。 DateID首先写为日期,后跟唯一的设备ID(例如YYYYMMDDUNIQUEID - 2014010110)。
如果我创建类似上面提到的文件夹(即201401,201402,201403等),是否有一种简单的方法来拉动字符串的一部分以匹配我要将文件定向到的文件夹? / p>
感谢您的帮助!
Calbruin
典型文件名:
GO.YO_WTR_SOO5_PT_20140102110.csv
答案 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。