Windows批处理文件来处理相机图像

时间:2013-11-28 07:39:27

标签: windows batch-file cmd

我正在尝试创建一个批处理文件,以便从相机或SD驱动器上拍摄照片(具体且不会更改。

然后,我希望将所有* .jpg移动到公司内部网络上的其他驱动器。

它的设置方式看起来像n:\jobnumberfolder\pictures.jpg

我需要将这些文件重命名为:“vpi(1).jpg”,“vpi(2).jpg”等等(在Windows中通过突出显示多个文件并单击重命名来完成同样的操作。

批处理文件将提示用户输入一个作业号(它将被移动到的文件夹)和一个描述(命名文件的内容)。

我的编程经验是有限的,在php和python中,但我确实理解了非常基础:循环,if-else,数组,......类似的东西。

我的问题是,使用批处理文件,我似乎无法找到一个好的方法来创建一个for循环来获得我想要的东西。我想我可以使用os模块在python中做到这一点,但我觉得我缺少一些简单的东西(比如一个简单的命令或者我可以用于Windows的东西)。

即使使用延迟扩展命令,我甚至无法获得要增加的变量。即使我可以,是否可以将其添加到文件名中?我试图找到答案,但一直没能。

所以我的问题是:

  1. 我可以在批处理文件中实际执行此操作吗?
  2. 编写一个python脚本来做它会更容易吗,这会导致我必须在公司的计算机上安装python?我只是希望能够在末尾重命名一个递增数字的文件。
  3. 这样的东西就是我正在寻找的东西

    i = 0 name =“whatever” 对于相机/图像中的每个jpg     将每个重命名为+ i     i + = 1

    任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

@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

答案 1 :(得分:0)

在两个地方更改n:\,在需要时更改f:\cam-folder\。这是未经测试的:

@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