Windows批处理文件来处理摄像机图像
我试图创建一个批处理文件来拍摄照片关闭相机或SD驱动器(这是具体的,不会改变。Windows批处理文件来处理摄像机图像
然后我想移动所有的*。 JPG公司的内部网络上的不同的驱动器
它的成立它看起来像n:\jobnumberfolder\pictures.jpg
我需要的文件能够被重新命名为喜欢的方式:“VPI(1).JPG”, “vpi(2).jpg”等等(您在Windows中通过突出显示多个文件并单击重命名完成的相同的事情)
批处理文件将提示用户输入作业编号(将被移动到的文件夹)和描述(文件命名)。
我的编程经验是有限的,在PHP和Python中,但我确实了解非常基础:循环,if-else,数组......等等。
我的问题是,与批处理文件,我似乎无法找到一个很好的方法来创建一个for循环来获得我想要的。我想我可以使用os模块在Python中执行此操作,但是我觉得我缺少一些简单的东西(比如简单的命令或者我可以用于Windows的东西)。
即使使用延迟扩展命令,我甚至无法获得增量变量。即使我可以,是否有可能将其添加到文件名?我试图为此找到答案,但一直未能。
所以我的问题是:
- 可我居然在一个批处理文件做到这一点?
- 只需要编写一个python脚本来执行它会更容易吗,这将导致我不得不在公司的计算机上安装python?我只是希望能够在最后使用递增的数字来重命名文件。
像这样的东西就是我要找的
I = 0 名称=在相机各JPG “无所谓” /图像 重命名每个到任何+我 我+ = 1
任何帮助,将不胜感激。
更改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
这工作真棒!非常感谢。 – user2028106
@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,*定界符=;” %% f“是什么意思? – user2028106
当使用findstr处理文件列表时,该数字作为前缀包含在行中,并且冒号”:“作为分隔符添加到内容(文件名)中。要拆分该行, for'命令被命令使用':'作为分隔符来分割行,并且从分割行中,我们需要两个令牌:第一个包含在第一个':'之前的文本,第二个包含该行的其余部分。第一个标记(行号)将被放置在%% f(指示的变量)和第二个标记(文件名)下一个变量中,%% g –
如果jobnumber存在,该怎么办? –
在照相机或SD卡上仍然重命名* .jpg,然后将其移至作业编号文件夹。移动部分很容易。我只是无法将文件重命名为像:图片(1),图片(2)等。 – user2028106
如果jobnumber文件夹存在,并且其中有文件,从之前的运行重新编号,新文件应该如何编号?并且没有办法(或多或少)知道是否任何当前文件已被复制到jobnumber文件夹中。重复的文件是可以接受的?或者这不会发生? –