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
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.
@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.
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\"
)
)
)