Search code examples
windowsbatch-filecmd

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

  • 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