create batch file based on date in file name and move files

后端 未结 2 1693
难免孤独
难免孤独 2021-01-24 10:53

I have a large number of excel files with filenames that all end in a timestamp that looks like this:

examplefile_2018_08_24_110222.xlsx

I would like to move all

相关标签:
2条回答
  • 2021-01-24 11:11

    You should be able to follow this previous question: How to rename file by replacing substring using batch in Windows

    That question is more of a "find and replace" batch file question but might serve you well. In your case, it seems like you may want to find and replace:

    2018_08 with July2018,

    2018_09 with August2018

    etc.

    The issue here is the amount of cases and loops needed.


    For example this would be 3 months:

    @echo off
    Setlocal enabledelayedexpansion
    
    Set "Location=C:\Users\Example"
    
    Set "Pattern=2018_08"
    Set "Replace=July2018"
    
    For %%# in ("%Location%\*.xlsx") Do (
        Set "File=%%~nx#"
        Ren "%%#" "!File:%Pattern%=%Replace%!"
    )
    
    Set "Pattern=2018_09"
    Set "Replace=August2018"
    
    For %%# in ("%Location%\*.xlsx") Do (
        Set "File=%%~nx#"
        Ren "%%#" "!File:%Pattern%=%Replace%!"
    )
    
    Set "Pattern=2018_10"
    Set "Replace=September2018"
    
    For %%# in ("%Location%\*.xlsx") Do (
        Set "File=%%~nx#"
        Ren "%%#" "!File:%Pattern%=%Replace%!"
    )
    
    Pause&Exit
    

    Note that C:\Users\Example would be replaced with your desired folder.

    0 讨论(0)
  • 2021-01-24 11:25

    I think this will do what you need it to do. I added some comments so please let me know if you do not understand a line of the code.

    @ECHO OFF
    
    REM get a list of the files
    FOR %%F IN (*.xlsx) DO (
        REM GET 2nd, 3rd and 4th parts of file name: examplefile_2018_08_24_110222.xlsx
        FOR /F "tokens=2,3,4 delims=_" %%G IN ("%%~F") DO (
            REM GET previous month and/or year
            FOR /F "delims=" %%J IN ('powershell "(Get-Date %%H/%%I/%%G).AddMonths(-1).ToString('MMMMyyyy')"') DO (
                REM make the directory
                md "%%J" >nul 2>&1
                REM move the file
                move "%%~F" "%%J\"
            )
        )
    )
    
    0 讨论(0)
提交回复
热议问题