Batch Scripting Moving files with timestamp

前端 未结 3 609
北海茫月
北海茫月 2021-01-17 01:40

So basically I have a file system C:\\Test\\BaseLine. Under BaseLine folder I have many folders, it could be one folder or 15 folders, in those folders are image files. I wa

相关标签:
3条回答
  • 2021-01-17 02:02

    You cannot do it with xcopy but as you've outlined in the comments, this renames the files before copying.

    The first four lines of this code will give you reliable YY DD MM YYYY HH Min Sec variables in XP Pro and higher.

    @echo off
    for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
    set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
    set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
    
    SET "DATE_FOLDER=%YYYY%%MM%%DD%"
    
    cd /d "C:\Test\BaseLine\"
    SET "ACHIEVE_DIR=C:\Test\Master Achieve" 
    md "%ACHIEVE_DIR%" 2>nul
    
    for /d %%a in (*) do (
    for /r %%b in ("%%a\*.jpg") do ren "%%~b" "%%~nb - %DATE_FOLDER%%%~xb"
    xcopy "%%a\*.jpg" "%ACHIEVE_DIR%\" /s/h/e/k/f/c/y
    )
    pause
    

    Edit code to move all *-tasty.jpg files to the %ACHIEVE_DIR% and datestamp them, then remove the original containing folders under C:\Test\BaseLine\ with all remaining files but leaving the files inside C:\Test\BaseLine\ intact.

    @echo off
    for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
    set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
    set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
    
    SET "DATE_FOLDER=%YYYY%%MM%%DD%"
    
    cd /d "C:\Test\BaseLine\"
    SET "ACHIEVE_DIR=C:\Test\Master Achieve" 
    md "%ACHIEVE_DIR%" 2>nul
    
    for /d %%a in (*) do (
    for /r %%b in ("%%a\*-tasty.jpg") do move "%%~b" "%ACHIEVE_DIR%\%%~nb - %DATE_FOLDER%%%~xb"
    rd /s /q "%%a"
    )
    pause
    
    0 讨论(0)
  • 2021-01-17 02:09

    This works -

    @echo off
    for /f "skip=1 delims=." %%i in ('wmic OS Get localdatetime') do set ts=%%i
    set dt=%ts:~6,2%-%ts:~4,2%-%ts:~0,4%
    
    set workdir=D:\test\baseline\
    set newdir=D:\test\Achieve\
    
    cd %workdir%
    
    for /f "delims=" %%i in ('dir /b /s *.jpg') do call :search "%%i"
    goto :eof
    
    :search
    set filepath=%~f1
    set dirpath=%~dp1
    set filename=%~n1
    set fileextn=%~x1
    if "%dirpath%" EQU "%workdir%" goto :eof
    copy /y "%filepath%" %newdir%\%filename%_%dt%%fileextn% >nul 2>&1
    
    :eof
    

    Test output -

    D:\>dir "d:\test\baseline", "d:\test\baseline\Folder 123", "d:\test\baseline\Folder 321"
     Volume in drive D is New Volume
     Volume Serial Number is B04C-AB59
    
     Directory of d:\test\baseline
    
    23/07/2014  21:24    <DIR>          .
    23/07/2014  21:24    <DIR>          ..
    23/07/2014  20:35                 2 1.jpg
    23/07/2014  20:35                 2 2.jpg
    23/07/2014  20:36    <DIR>          Folder 123
    23/07/2014  20:37    <DIR>          Folder 321
                   2 File(s)              4 bytes
    
     Directory of d:\test\baseline\Folder 123
    
    23/07/2014  20:36    <DIR>          .
    23/07/2014  20:36    <DIR>          ..
    23/07/2014  20:36                 2 3.jpg
    23/07/2014  20:36                 2 4.jpg
                   2 File(s)              4 bytes
    
     Directory of d:\test\baseline\Folder 321
    
    23/07/2014  20:37    <DIR>          .
    23/07/2014  20:37    <DIR>          ..
    23/07/2014  20:37                 2 5.jpg
    23/07/2014  20:37                 2 6.jpg
                   2 File(s)              4 bytes
                   2 Dir(s)   7,037,329,408 bytes free
    
    D:\>draft.bat
    
    D:\test\baseline>cd\
    
    D:\>dir d:\test\Achieve
     Volume in drive D is New Volume
     Volume Serial Number is B04C-AB59
    
     Directory of d:\test\Achieve
    
    23/07/2014  21:24    <DIR>          .
    23/07/2014  21:24    <DIR>          ..
    23/07/2014  20:36                 2 3_23-07-2014.jpg
    23/07/2014  20:36                 2 4_23-07-2014.jpg
    23/07/2014  20:37                 2 5_23-07-2014.jpg
    23/07/2014  20:37                 2 6_23-07-2014.jpg
                   4 File(s)              8 bytes
                   2 Dir(s)   7,037,329,408 bytes free
    

    Cheers, G

    EDIT - This works based on your original question. I haven't seen the comments on the other answer yet. Let me know if you need changes.

    0 讨论(0)
  • 2021-01-17 02:19

    BEFORE running draft.bat

    D:\>dir "d:\test\baseline", "d:\test\baseline\Folder 123", "d:\test\baseline\Folder 321"
    Volume in drive D is New Volume
    Volume Serial Number is B04C-AB59
     Directory of d:\test\baseline
    
    23/07/2014  21:24    <DIR>          .
    23/07/2014  21:24    <DIR>          ..
    23/07/2014  20:35                 2 1.jpg
    23/07/2014  20:35                 2 2.jpg
    23/07/2014  20:36    <DIR>          Folder 123
    23/07/2014  20:37    <DIR>          Folder 321
                   2 File(s)              4 bytes
    
     Directory of d:\test\baseline\Folder 123
    
    23/07/2014  20:36    <DIR>          .
    23/07/2014  20:36    <DIR>          ..
    23/07/2014  20:36                 2 3-tasty.jpg
    23/07/2014  20:36                 2 3-not tasty.jpg
    23/07/2014  20:36                 2 4-tasty.jpg
    23/07/2014  20:36                 2 4-not tasty.jpg
                   2 File(s)              4 bytes
    
     Directory of d:\test\baseline\Folder 321
    
    23/07/2014  20:37    <DIR>          .
    23/07/2014  20:37    <DIR>          ..
    23/07/2014  20:37                 2 5-tasty.jpg
    23/07/2014  20:37                 2 5-not tasty.jpg
    23/07/2014  20:37                 2 6-tasty.jpg
    23/07/2014  20:37                 2 6-not tasty.jpg
                   2 File(s)              4 bytes
                   2 Dir(s)   7,037,329,408 bytes free
    
    D:\>draft.bat
    

    AFTER

    D:\test\baseline>cd\
    
    D:\>dir d:\test\Achieve
     Volume in drive D is New Volume
     Volume Serial Number is B04C-AB59
    
     Directory of d:\test\Achieve
    
    23/07/2014  21:24    <DIR>          .
    23/07/2014  21:24    <DIR>          ..
    23/07/2014  20:36                 2 3_23-07-2014.jpg
    23/07/2014  20:36                 2 4_23-07-2014.jpg
    23/07/2014  20:37                 2 5_23-07-2014.jpg
    23/07/2014  20:37                 2 6_23-07-2014.jpg
                   4 File(s)              8 bytes
                   2 Dir(s)   7,037,329,408 bytes free
    
    
     Directory of d:\test\baseline
    
    23/07/2014  21:24    <DIR>          .
    23/07/2014  21:24    <DIR>          ..
    23/07/2014  20:35                 2 1.jpg
    23/07/2014  20:35                 2 2.jpg
    23/07/2014  20:35                 2 3.jpg
    23/07/2014  20:35                 2 4.jpg
    23/07/2014  20:35                 2 5.jpg
    23/07/2014  20:35                 2 6.jpg
                   2 File(s)              4 bytes
    

    Notice how baseline does not have any more folders because they all got deleted after moving all of files
    non-tasty -> baseline without non-tasty extension
    tasty -> achieve without tasty but with date stamp

    I hope you can understand now. Thanks a lot

    0 讨论(0)
提交回复
热议问题