2013-11-28 79 views
0

我试图创建一个批处理文件来拍摄照片关闭相机或SD驱动器(这是具体的,不会改变。Windows批处理文件来处理摄像机图像

然后我想移动所有的*。 JPG公司的内部网络上的不同的驱动器

它的成立它看起来像n:\jobnumberfolder\pictures.jpg

我需要的文件能够被重新命名为喜欢的方式:“VPI(1).JPG”, “vpi(2).jpg”等等(您在Windows中通过突出显示多个文件并单击重命名完成的相同的事情)

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

我的编程经验是有限的,在PHP和Python中,但我确实了解非常基础:循环,if-else,数组......等等。

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

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

所以我的问题是:

  1. 可我居然在一个批处理文件做到这一点?
  2. 只需要编写一个python脚本来执行它会更容易吗,这将导致我不得不在公司的计算机上安装python?我只是希望能够在最后使用递增的数字来重命名文件。

像这样的东西就是我要找的

I = 0 名称=在相机各JPG “无所谓” /图像 重命名每个到任何+我 我+ = 1

任何帮助,将不胜感激。

+0

如果jobnumber存在,该怎么办? –

+0

在照相机或SD卡上仍然重命名* .jpg,然后将其移至作业编号文件夹。移动部分很容易。我只是无法将文件重命名为像:图片(1),图片(2)等。 – user2028106

+0

如果jobnumber文件夹存在,并且其中有文件,从之前的运行重新编号,新文件应该如何编号?并且没有办法(或多或少)知道是否任何当前文件已被复制到jobnumber文件夹中。重复的文件是可以接受的?或者这不会发生? –

回答

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 
+0

这工作真棒!非常感谢。 – user2028106

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 
+0

感谢您的回答。我明天会试试这个。什么是“令牌= 1,*定界符=;” %% f“是什么意思? – user2028106

+0

当使用findstr处理文件列表时,该数字作为前缀包含在行中,并且冒号”:“作为分隔符添加到内容(文件名)中。要拆分该行, for'命令被命令使用':'作为分隔符来分割行,并且从分割行中,我们需要两个令牌:第一个包含在第一个':'之前的文本,第二个包含该行的其余部分。第一个标记(行号)将被放置在%% f(指示的变量)和第二个标记(文件名)下一个变量中,%% g –