'Windows batch file to process camera images

I am trying to create a batch file to take photos off a camera or sd drive (which are specific and don't change.

I then want to move all the *.jpg to a different drive on the company's internal network.

The way it's set up it will look like n:\jobnumberfolder\pictures.jpg

I need the files to be able to be renamed like: "vpi(1).jpg", "vpi(2).jpg" and so on (the same thing you accomplish in Windows by highlighting multiple files and clicking rename.

The batch file will prompt the user for a job number (which will be the folder it will be moved to), and a description (what to name the file).

My programming experience is limited and in php and python, but I do understand the very basics: loops, if-else, arrays,... things like that.

My problem is that with the batch file, I cannot seem to find a good way to create a for loop to get what I want. I think I could do this in python using the os module, but I feel like I'm missing something simple (like a simple command or something I could be using for Windows).

I cannot even get a variable to increment, even with delayed expansion command. Even if I could, would it be possible to add it to the file name? I tried to find an answer for this, but have not been able to.

So my question are:

  1. Can i actually do this in a batch file?
  2. Would it be easier to just write a python script to do it, which will cause me to have to install python on the company's computer? I just want to be able to rename a file with a incrementing number at the end.

Something like this is what I'm looking for

i = 0 name = "whatever" for each jpg in camera/images rename each to whatever + i i+=1

Any help would be appreciated.



Solution 1:[1]

Change n:\ in two places and f:\cam-folder\ where needed. It's untested:

@echo off
:loop
cls
echo Enter "jobnumberfolder,description" with comma and no quotes:
echo similar to     986,vpi
set "var="
set /p "var="
for /f "tokens=1,* delims=," %%a in ("%var%") do set "job=%%a"&set "desc=%%b"
echo "%job%" "%desc%" - correct? press enter to continue or N to start again:
set "var="
set /p "var="
if defined var goto :loop
md "n:\%job%\" 2>nul
setlocal enabledelayedexapansion
echo.
set c=0
for %%a in ("f:\cam-folder\*.jpg") do (
   set /a c+=1
   echo copying "n:\%job%\%desc%(!c!)%%~xa"
   copy "%%a" "n:\%job%\%desc%(!c!)%%~xa" >nul
)
echo done
pause

Solution 2:[2]

@echo off
    setlocal enableextensions enabledelayedexpansion

    rem configuration
    set "sourceFolder=w:\images"
    set "targetFolder=n:\jobs"

    rem test if there is something to copy
    if not exist "%sourceFolder%\*.jpg" (
        echo NO FILES FOUND
        goto endProcess
    )

:askJob 
    rem ask job number
    set /p "jobNumber=Job Number  : "

    rem test if no job number
    if "%jobNumber%"=="" (
        echo NO JOB NUMBER - End of process
        goto endProcess
    )

    rem test for existing job number
    if exist "%targetFolder%\%jobNumber%" (
        echo DUPLICATE JOB
        goto askJob
    )

    rem ask for description
    set /p "description=Description : "

    rem test for no description
    if "%description%"=="" (
        echo NO DESCRIPTION - End of process
        goto endProcess
    )

    rem WARNING - No test for valid job number nor valid description
    rem WARNING - Don't shoot your own foot, or add code to validate
    rem WARNING - according to your needs

    rem create target job folder
    set "target=%targetFolder%\%jobnumber%"
    mkdir "%target%" > nul 2>nul

    rem DO THE COPY 
    rem Generate a file list (dir), numerate it (findstr /n) and for each line
    rem in generated list, split the number from the filename (for with delims)
    rem and copy source file to numbered target file

    for /f "tokens=1,* delims=:" %%f in ('dir /tc /od /b "%sourceFolder%\*.jpg" ^| findstr /n "^"') do (
        echo transfer: "%sourceFolder%\%%g" == "%target%\%description%(%%f).*"
        copy "%sourceFolder%\%%g" "%target%\%description%(%%f).*" >nul 2>nul
    )

    echo FILES COPIED

:endProcess
    rem Clean 
    endlocal

    rem and exit
    exit /b

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 foxidrive
Solution 2 MC ND