如何根据时间戳将文件排序到新文件夹或现有文件夹中

时间:2013-09-20 19:31:36

标签: python windows cmd

我有一些IP摄像机根据检测到的移动每分钟记录1-2个文件,我正在寻找一种方法,根据文件名自动将一组视频文件移动到新的或现有的文件夹中。以时间戳格式。这将在每天特定时间在Windows 7中完成,此时相机不记录。

如果新创建的文件不存在该文件夹(通常情况下除了小时的第一个文件之外的所有文件),理想情况下,它将根据创建它们的小时(不是最后修改)进行)。

这最好通过cmd或python脚本完成,以及如何?我的猜测是我必须从文件名中解析小时/日/月/年,检查是否存在相应的文件夹,如果没有创建,则移动它。

谢谢!

enter image description here

2 个答案:

答案 0 :(得分:1)

简单的脚本,不是递归的。

    @echo off
@rem USAGE: MoveIt FromDir ToDir

setlocal

    if "%1"=="" goto :Usage
    if "%2"=="" goto :Usage

    pushd "%~2"
    set target=%CD%
    popd

    pushd "%~1"
    set root=%CD%

rem xxYYYY MM DD HH MM SS
rem 1_2013-09-20_25-11-08
rem 0123456789.123456789.

    for %%a in (*) do call :MoveIt "%%a"

    goto :EOF

:MoveIt

    rem Extract just the filename (no path or extension)
    set name=%~n1

    rem Extract the hour
    set hour=%name:~13,2%

    rem Create the directory hourname
    if not exist "%hour%" mkdir "%hour%"

    rem Move the file
    echo move "%~1" "%target%\%hour%"
    goto :EOF

:Usage
    echo Usage: moveByTime.bat  RootDirectory TargetDirectory
    goto :EOF

答案 1 :(得分:1)

这可能会更直接一些。修改第2行和第3行以适合您的系统,然后将批处理文件放在您的用户文件夹中,您可以安排它。

首先在一些示例文件上测试它。

@echo off
set "target=d:\monitoring video\backups"
pushd "c:\camera\videos folder"

for /f "tokens=5 delims=-_" %%a in (' dir /b /a-d ') do (
echo processing "%%a"
md "%target%\%%a" 2>nul
move "%%a" "%target%\%%a" >nul
)
popd

BTW,您的要求是创建一个hour文件夹并将相应的文件移入其中。这意味着每天01小时的文件将进入相同的01文件夹。那是你想要的吗?