windows bat系列6:检查文件(清单)是否存在&7zip压缩

1.    背景

DOS下的BAT批处理操作往往提供一个文件清单,然后对文件清单进行操作,如压缩、FTP/FTPS发送到远端、删除等,如何判断此文件清单的文件是否存在呢?解决此问题就有了此博客。

2.    思路

假如有文件清单filelist.txt如下:

E:\document\code_new
E:\java
E:\picture\11.PNG
E:\picture\12.PNG
E:\picture\notexist.PNG

其中,前四个目录(文件是存在的),最后一个文件不存在,因而笔者故意命名为notexist.

         考虑到以下两步可解决此问题:

a)  逐行遍历filelist.txt的内容;

b)  对每一行内容进行判断是否存在。

3.    代码

@echo off
Rem close echo

rem into current path
pushd %~dp0

set FILENAME=filelist.txt
for /f "delims=^" %%i in (%FILENAME%) do (
	if exist %%i (
		echo %%i
	)else (
		echo [Warning] %%i is no exist
	)
)
popd
pause

4.    代码解释:

a) filelist.txt与脚本文件(假设为checkfile.bat)同级目录,pushd%~dp0表示“保存当前目录以供 POPD 命令使用,然后改到指定的目录”,也就是进入到脚本所在目录(由%~dp0指示);

b) for循环逐行遍历文件内容,将内容保存在变量i中;

c)  if函数检查变量i指示的文件(目录)是否存在。存在,则echo文件名;不存在,则echo [warning];

d)  popd回到之前pushd之前的目录。

补充:

         if的帮助文档中显示有三种用法:

IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command

1.   检查上一条命令执行的结果(errorlevel),然后执行命令;

2.   检查两个字符串是否相等,然后执行命令;

3.   检查文件是否存在,然后执行命令--------本博所用。

关于pushd/popd这对命令Linux也有,在写shell脚本时用处很大,命令就是将目录加入/弹出目录栈,方便快速切换脚本执行的当前目录。

5.    测试结果

windows bat系列6:检查文件(清单)是否存在&7zip压缩_第1张图片

6.    7zip压缩

a.      7-zip简介(官网)

7-Zip is afile archiver with a high compression ratio. 7-Zip is freesoftware with open source. The most of the code is under the GNULGPL license. Some parts of the code are under the BSD 3-clause License.Also there is unRAR license restriction for some parts of the code.

         翻译:7zip是一款拥有高压缩比的文件打包工具,是一个开源的自由软件。其大多数代码都是基于GNU LGPL开源许可,少量代码基于BSD 3条款许可。然而,也有些代码存在unRAR许可限制。

b.      安装与配置

安装就不说了,直接在官网https://www.7-zip.org/上下载安装即可进行傻瓜式安装。这里要补充的是安装后,7zip提供命令行版本和GUI版本。而我们要在DOS脚本中使用的是命令行版本,是安装目录下的一个叫7z.exe的文件。

配置:为了在cmd窗口的任意路径能找到7z.exe这个文件,我们把7z的安装目录添加到环境变量中,如图所示。这样我们可以在cmd下直接使用7z的命令了。

windows bat系列6:检查文件(清单)是否存在&7zip压缩_第2张图片

c.      根据文件清单压缩

有了上面检测文件是否存在的基础,此需求很简单了。但检测到文件存在时,用7z添加到压缩包即可。

d.      代码

@echo off
Rem close echo

rem into current path
pushd %~dp0

set FILENAME=filelist.txt
for /f "delims=^" %%i in (%FILENAME%) do (
	if exist %%i (
		Rem use 7z
		7z a d:\test.zip %%i
	)else (
		echo [Warning] %%i is no exist
	)
)
popd
pause

e.      7zip原始参考资料

7zip最权威最原始的参考资料有两个:

一是官网;二是安装目录有个叫7-zip.chm的文件

认真看,一切OK。

                                                                    完---感谢。

你可能感兴趣的:(Windows,DOS)