Batch file that will move PDFs to corresponding folders

vlsllp
vlsllp used Ask the Experts™
on
Hello,

Our financial institution is using a system that generates client PDFs in a specific format. For example, the system we use exports PDFs in location \\serverA\clientPDFs\ as this format:

1455-Douglas T Thompson-2013Archivek1Package.pdf
4785-Cheri Lockson-2013Archivek1Package.pdf
7899-Thomas Pete-2012Archivek1Package.pdf
etc... (we have hundreds of them waiting to be moved)

but all clients of different types are in 1 folder instead of its own assigned client folder.

I need a batch file that will migrate the clients above to its corresponding client ID. An example of its final result would be:

\\serverB\client\1455\1455-Douglas T Thompson-2013Archivek1Package.pdf\
\\serverB\client\4785\4785-Cheri Lockson-2013Archivek1Package.pdf\
\\serverB\client\7899\7899-Thomas Pete-2012Archivek1Package.pdf\


anything will help, thanks in advance!
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
dsackerContract ERP Admin/Consultant

Commented:
Put this in a .bat file, and test it:
@echo off

for /f %%a in ('dir /b \\serverA\clientPDFs\*.PDF') do (
    call:MoveThisFile %%a
)
goto:EOF

:MoveThisFile

    set file=%1
    set node=%file:~0,4%

    rem Comment out the following two lines when you're ready to run this for real

    echo if not exist \\serverB\client\%node% mkdir \\serverB\client\%node%
    echo move \\serverA\clientPDFs\%file% \\serverB\client\%node%\.

    rem Remove the "rem" comments from these next two lines when you're ready to run this for real

    rem    if not exist \\serverB\client\%node% mkdir \\serverB\client\%node%
    rem    move \\serverA\clientPDFs\%file% \\serverB\client\%node%\.

    goto:EOF

Open in new window

NVITEnd-user support

Commented:
Try this:

@echo off
for %%a in (*.pdf) do (call :DoIT %%a)
goto :EOF

:DoIt
echo.
set IDA=%1
set ID=%IDA:~0,4%
md %ID%	
move "%1" %ID%
)

Open in new window

Author

Commented:
We appreciate the quick reply!

i tried inputting your code into a .bat file,

Prior testing this on my server I created 2 folders on my desktop: "%USERPROFILES\Desktop\serverA\" and "%USERPROFILES\Desktop\serverB\

 here's what I have so far, but didn't seem to work. thanks again

@echo off

for /f %%a in ('dir /b %USERPROFILE%\Desktop\serverA\*.PDF') do (
    call:MoveThisFile %%a
)
goto:EOF

:MoveThisFile

    set file=%1
    set node=%file:~0,4%

    rem Comment out the following two lines when you're ready to run this for real

    echo if not exist %USERPROFILE%\Desktop\serverB\%node% mkdir %USERPROFILE%\Desktop\serverB\%node%
    echo move %USERPROFILE%\Desktop\serverA\%file% %USERPROFILE%\Desktop\serverB\%node%\.

    rem Remove the "rem" comments from these next two lines when you're ready to run this for real

    if not exist %USERPROFILE%\Desktop\serverB\%node% mkdir %USERPROFILE%\Desktop\serverB\%node%
    move %USERPROFILE%\Desktop\serverA\%file% %USERPROFILE%\Desktop\serverB\%node%\.

    goto:EOF
Should you be charging more for IT Services?

Do you wonder if your IT business is truly profitable or if you should raise your prices? Learn how to calculate your overhead burden using our free interactive tool and use it to determine the right price for your IT services. Start calculating Now!

dsackerContract ERP Admin/Consultant

Commented:
What kind of error message(s) did you get?
EirmanChief Operations Manager
Commented:
This little utility will do what you want (and other stuff as well) without coding ...
http://www.robobasket.com/create-folder-using-part-of-filename.html
NVITEnd-user support

Commented:
Maybe you need to wrap these in quotes?
%USERPROFILE%\Desktop\serverB\%node%
%USERPROFILE%\Desktop\serverA\%file%

Open in new window

i.e.
"%USERPROFILE%\Desktop\serverB\%node%"
"%USERPROFILE%\Desktop\serverA\%file%"

Open in new window


Also, does that ending "." need to be removed?
move \\serverA\clientPDFs\%file% \\serverB\client\%node%\.

Open in new window

Contract ERP Admin/Consultant
Commented:
I have amended the code a little, as follows, where you can set your source an target directories up front:
@echo off

    setlocal

    set source=\\serverA\clientPDFs
    set target=\\serverB\client
    set files=*.PDF

    for /f "delims=^|" %%a in ('dir /b "%source%\%files%"') do (
        call:MoveThisFile %%a
        if errorlevel 1 goto:EOF
    )

    goto:EOF

:MoveThisFile

    set file=%*
    set node=%file:~0,4%

    if not exist "%target%\%node%" mkdir "%target%\%node%"
    if errorlevel 1 goto:EOF

    move "%source%\%file%" "%target%\%node%\."
    goto:EOF

Open in new window

I changed the code recently (a few hours after posting this, to wrap double-quotes around the source and target, just in case you had spaces in the file or directory names. I also added some error checking. Tested it with some test files I created, and it seems to work okay.
dsackerContract ERP Admin/Consultant

Commented:
FYI, vlsllp, I changed the code a little (above), adding double-quotes in case of any spaces and adding error checking. I tested it with files I created,and it seems to work okay.

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial