利用windows系统批量处理图片文件的实践

(整期优先)网络出版时间:2021-10-09
/ 3

利 用 windows 系统批量处理 图片文件的实践

1 李增辉 2 张学朋

1 河南有色金属地质矿产局第六地质大队; 2 河南鑫地矿业投资有限公司

摘要:土地确权档案整理在利用扫描仪进行批量作业时,因图片归类管理工作步骤很多,采用普通的文件操作方法已不能满足批量快速作业的目标,某些简单重复的操作可以考虑用计算机的批处理脚本代劳,可以明显地提高工作速度,最大限度地释放在计算机上浪费的时间成本。

关键词:批处理,批量,扫描,重命名,batch,dos,

一,批处理脚本介绍

批处理(Batch)[1],也称为批处理脚本。顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,其扩展名为bat。组成 batch脚本的语句由DOS(Disk Operation System,磁盘操作系统)语言演变而来。很喜欢中国 DOS 联盟主页上的一句话:DOS 是一个时代,旧的 DOS 时代已经过去自由开放的全新的DOS时代也已到来[2]。DOS 依旧如影随形地影响着计算机软件的发展。早期的几乎所有DOS命令已集成到了 windows 中,使用32位命令解释工具 cmd.exe窗口来执行命令,这种简化的批处理脚本运行时不依赖于其它程序。如果想调试某个批处理程序,可以在命令窗口中的提示符后输入批文件所在磁盘盘符(如 d 盘)”d:”,按回车键,进入到”d:”盘根目录中[3],然后再用例如”cd \test”即可进入 d 盘中测试文件所在的目录,键入”test.bat”后批测试文件就开运行了。有关 Dos 命令行方面的资料非常多,但综合利用这些丰富的命令资源面面俱到地实现不同自动化目标任务的出版书籍却非常少。一些简单不断重复的工作如果能用 dos 批处理解决就没必要花大量时间去网上搜索相关软件工具包。多条Dos命令行,组成一个批处理,与逐条使用 DOS 命令管理 Windows 任务相比,批处理方式能够实现 windows 任务的自动管理,可以将用户从重复、烦琐、复杂的任务管理中解放出来,达到事半功倍[4]效果。

二,工作任务介绍

2020年,我们做过土地确权档案扫描整理工作,成千上万户宗地的地籍资料,在装订成册入库之前,需要用枫林高拍仪逐页翻开拍照,每一本都需要扫描成电子版的图片单独文放入一文件夹,每个文件夹内图片数量约1~14 张,每一张图片对应一个名称,需要命名。如果一个村有500户,就表示需要500个文件夹,每个文件夹的名称为地籍编号(如:411426108213JC00230),每个文件夹不同的地方在后五位数字上,其取值范围在00001-00500 之间包括起止数字,每扫描一户的图片就对应地新建一个地籍号命名的文件夹,再把扫描好的图片拷贝到这个文件夹,才算完成一户的资料录入工作。这种操作步骤需要反复的执行 500 次才算完成一个村的资料录入工作,如果每本有14 页需要扫描,扫描每册可能要 3-5 分钟,扫完图片还需要新建重命名文件夹,并把图片拷贝到该文件夹中,再重命名每张图片。扫完一本资料已耗时太多,要完成仓库里的大量资料太难。

三,批处理成果代码展示

为简化手动步骤、提高在windows系统中运行速度及多台机器移植性能,采用系统自带编程脚本 DOS 批处理作工具,研究代码实现过程。经过调试,由局部到整体将命令组合逐步构建代码,以实际文件拷贝到测试文件夹反复调试,成功实现目的。代码如下:

---------------------------------------------------------

(@echo off) & (setlocal enabledelayedexpansion) & (color 20) & (mode con:cols=85 lines=20) & (set interval=2)

:begain

Cls & echo -----------------------重新请按 R----------------------------------------------

echo 选择 a:每个村的宗地号不同,在重命名迁移文件夹前需要设置好宗地号,每个村设置只需一次。

echo 选择 b:如果扫描后图片中没有身份证,按上面的顺序命名就会不对号,这种情况要单独命名。

echo 选择 c:本宗地标记有两个共有人,四张土地登记申请图片,这种也需要单独命名。

echo 如果碰到不在上面所列的新情况,请及时向主管领导反映,绝不能用上面的规则命名迁移。

echo 常规命名迁移请输宗地号后三位(如:001)按回车就可以了。

echo ------------------请根据提示输入选择------------------------------------------------- & echo.

:input

set /p choic=请输入选择或输宗地号:_

(if !choic!==r goto begain:) & (if !choic!==a goto get_zdh:) & (if !choic!==b goto no_id) & (if !choic!==c goto two_id) & (if !choic! neq c goto common:)

:get_zdh

set /p zdh=请输入宗地号:_ & (echo !zdh!>zdh.txt) & (goto begain:)

:rename

(dir /b/o:n/a *.jpg>>list.txt) & (set x=0) & for /f "tokens=1,2 delims=." %%c in (list.txt) do (set /a x=!x!+1 & ren "%%c.%%d" "!x!.jpg" ) & (del list.txt) & (goto :eof)

:make_directory

for /f "delims=" %%i in (zdh.txt) do ((set zdh=%%~ni) & (set zdh1=!zdh:~0,-3!!choic!) & (md ..\!zdh1!\ 2>a.txt & type a.txt | find "子目录或文件" && ((del a.txt) & pause & goto begain:)) & (move "*.jpg" ..\!zdh1!\)) & (del a.txt) & (goto :eof)

:zdh

(call :get_zdh & goto begain: )

:no_id

(set /p choic=请输宗地号 1:_) & (call :rename) & (call :D) & (call :make_directory) & (goto end:)

:two_id

(set /p choic=请输宗地号 2:_) & (call :rename) & (call :E) & (call :make_directory) & (goto end:)

:common

(call :rename) & (call :baseren) & (call :make_directory ) & (goto end:)

::以下是各种不同情况下的命名方案标

:base_ren

(ren "1.jpg" "地籍调查表 1.jpg" 2>nul) & (ren "2.jpg" "地籍调查表 2.jpg" 2>nul) & (ren "3.jpg" "地籍调查表 3.jpg" 2>nul) & (ren "4.jpg" "地籍调查表 4.jpg" 2>nul) & (ren "5.jpg" "地籍调查表 5.jpg" 2>nul) & (ren "6.jpg" "地籍调查表 6.jpg" 2>nul) & (goto :eof)

:baseren

call :base_ren

(ren "7.jpg" "土地登记申请书 1.jpg" 2>nul) & (ren "8.jpg" "土地登记申请书 2.jpg" 2>nul) & (ren "9.jpg" "身份证复印件.jpg" 2>nul) & (ren "10.jpg" "户口本复印件 1.jpg" 2>nul) & (ren "11.jpg" "户口本复印件 2.jpg" 2>nul) & (ren "12.jpg" "户口本复印件 3.jpg" 2>nul) & (goto :eof)

:D

(call :base_ren) & (ren "7.jpg" "土地登记申请书 1.jpg" 2>nul) & (ren "8.jpg" "土地登记申请书 2.jpg" 2>nul) & (ren "9.jpg" "户口本复印件 1.jpg" 2>nul) & (ren "10.jpg" "户口本复印件 2.jpg" 2>nul) & (ren "11.jpg" "户口本复印件 3.jpg" 2>nul) & (goto :eof)

2:E

(call :base_ren) & (ren "7.jpg" "土地登记申请书 1.jpg" 2>nul) & (ren "8.jpg" "土地登记申请书 2.jpg" 2>nul) & (ren "9.jpg" "土地登记申请书3.jpg" 2>nul) & (ren "10.jpg" "土地登记申请书 4.jpg" 2>nul) & (ren "11.jpg" "身份证复印件 1.jpg" 2>nul) & (ren "12.jpg" "身份证复印件 2.jpg" 2>nul) & (ren "13.jpg" "户口本复印件 1.jpg" 2>nul) & (ren "14.jpg" "户口本复印件 2.jpg" 2>nul) & (goto :eof)

:end

(timeout %interval% 1>nul;2>nul) & cls & (goto begain:)

---------------------------------------------------------------------------------------------------------------------------------

四,代码使用方法

完整代码为分割线中的内容,不包括分割线。复制本代码到记事本中保存为 bat 格式文件,编码格式要求ansi,保证汉字不显示乱码。本批处理保存的文件名为《枫林高拍仪补丁》,其使用方法如下:

1,先在村文件夹下新建临时文件夹比如:tmp

2,把本程序拷贝到 tmp 文件夹里

3,第一次使用需要输入本村宗地号如:411426104201JC00008,输入方法:双击运行程序,根据屏幕提示“请输入选择[a:宗地编号[b:无身份证[扫描输宗地号后三位(如:001):”输入 a,以便入地籍号,找一本本村的地籍调查表,输入封面上的宗地号回车后。村地籍号就设置好了,程序会在当前目录新建一文本文件 zdh.txt 用来保存本村宗地号,勿删。

4,接下来开始工作,打开枫林高拍仪扫描软件,在左下角每次都要选的工作目录选择窗口将工作扫描图片存放目录设置为上面新建的tmp文件夹,

5,开始扫描地籍调查表,一户扫描完成后切换到任务栏中的[高拍仪补丁修正窗口],中根据提示输入(比如:008),输完回车!图片就归档到相应的户文件夹理了,且一一对应命名了真实的名称。

6,枫林高拍仪工作窗口不更换目录其命名规则将一直持续下去 01.....20....30.....,在使用本补丁后只要在左侧目录窗口空白处刷新一下,将从头开始 01,02,03,04.....,原因就是刷新操作相当于检查工作目录是否为空,补丁每次迁移图片后工作区就没图片了,结果为空,命名从头开始。

7.命名规则是相对固定的,当调查表扫描时缺少身份证,那第 9--11 图片的命名就会出错!这种特殊情况下,在输后三位数字前请先输入‘B’键,再接着提示输入后三位如:002 数字后就命名归档就完成了。

五.文章总结

本文代码不算漂亮,但对完成指定工作已经足够,也希望能对读者有所启示!虽然本段代码是为图片命名迁移管理而编制,但是它对其他格式的文件依然有用,本例中文件的后缀即扩展名均为jpg,如果想对 doc 或者 xls 格式的文件做相似处理只需要把所列代码中的关键字”jpg”替换成其它格式即可。另外还可以将宗地号码倒数三位前的字符串换成自己想要的文件夹名字。在做批处理工作之前均需要进测试,满意即可正式运行,否则带来的错误损失将是不可逆的。如果利用好 DOS 命令的优势,充分发挥批处理程序在协调、控制和管理命令执行方面的强大功能,则可以大大提高工作效率。

参 考 文 献

[1] 《科普中国.科学百科》”batch”栏目

[2] 《DOS 在网络管理及故障诊断中的典型应用》.雏志资讯,邹县芳,张发凌编著,人民邮电出版社。

[3] 《DOS 在磁盘管理与系统维护中的典型应用(入门篇)》.雏志资讯,张发凌编著,人民邮电出版社

[4] 《批处理命令在 WINDOWS 操作中的典型应用》. .雏志资讯,张发凌编著,人民邮电出版社