I'm working on a script for copying files in a folder which corresponds to the file's name and I have that part worked out using a FOR loop which checks to make sure the destination folder exists and copies the files once it has verified that it does. Example: 11-01111_ABC_DEF.pdf would go into /11/0111/. The length may vary by one or two characters but the format is consistent. I've copied my basic script below.
My problem is that sometimes a file with the same name needs to be processed. How could I go about concatenating a number to the end of the file if one or more copies of the file already exists in the destination folder?
setlocal enableextensions enabledelayedexpansion
for %%x in (*.PDF *.TXT) do (
set "source="C:\files"
set "dest=R:\"
set "filename=%%x"
set "prefix=!filename:~0,2!"
set "folder=!filename:~3,5!"
if not exist !dest!\!prefix!\!folder! MOVE !filename! !source!\failed
if exist !source!\!filename! MOVE !filename! !dest!\!prefix!\!folder!
)
setlocal ENABLEDELAYEDEXPANSION
set "dest=worked"
for %%i in (*.pdf *.txt) do (
for /f "tokens=1-3* delims=-_." %%j in ("%%i") do (
if exist "%dest%\%%j\%%k" if exist "%dest%\%%j\%%k\%%i" if exist "%dest%\%%j\%%k\%%j-%%k-1_%%l_%%m" (
for /f "tokens=1-9* delims=-_." %%n in ('dir %dest%\%%j\%%k\%%j-%%k*-* /b') do set /a inc=%%p
set /a inc+=1
move "%%i" "%dest%\%%j\%%k\%%j-%%k-!inc!_%%l_%%m" || move "%%~i" "failed"
set inc=
)
if exist "%dest%\%%j\%%k\%%i" if not exist "%dest%\%%j\%%k\%%j-%%k-1_%%l_%%m" (
move "%%i" "%dest%\%%j\%%k\%%j-%%k-1_%%l_%%m" || move "%%~i" "failed"
)
if exist "%dest%\%%j\%%k" if not exist "%dest%\%%j\%%k\%%~i" (
move "%%~i" "%dest%\%%j\%%k\%%~i" || move "%%~i" "failed"
)
if not exist "%dest%\%%j\%%k" move "%%~i" "failed"
)
)
put this in the folder with the .txts and .pdfs comment if you want me to change something.
setlocal EnableDelayedExpansion
rem Set the maximum number of repeated names (keep it low):
set maxNumber=9
set "source=C:\files"
set "dest=R:\"
for %%x in (*.PDF *.TXT) do (
for /F "tokens=1,2 delims=-_" %%a in ("%%x") do (
set "prefix=%%a"
set "folder=%%b"
)
set "filename=%%x"
if not exist %dest%\!prefix!\!folder! MOVE !filename! %source%\failed
if exist %source%\!filename! (
set "destname=!filename!"
rem If destination filename already exists: concatenate a sequential number
if exist %dest%\!prefix!\!folder!\!destname! (
set "filename=%%~Nx"
set "destname="
for /L %%i in (1,1,%maxNumber%) do if not defined destname (
if not exist %dest%\!prefix!\!folder!\!filename!-%%i%%~Xx set destname=!filename!-%%i%%~Xx
)
)
MOVE !filename! %dest%\!prefix!\!folder!\!destname!
)
)