批处理编程清除指定文件

作者:半点闲
时间:2014-3-29 16:16
博客:blog.csdn.net/cg_i
邮箱:
b_dx@sohu.com
参考书籍:《Windows命令行详解手册》
参考资源:
《批处理命令 For循环命令详解》《Windows Command Shell的批处理参数》
读书笔记:3.5.4 变量作用范围局部化
关键字:Windows命令行详解手册 批处理编程 SETLOCAL PUSHD POPD FOR FINDSTR IF NOT EXIST %1 %~1 %2

    前几天,无意中看到此书。这是一本讲解如何通过命令行管理Windows系统的不多见的书籍之一,纯粹从命令行的角度来讲解如何完成复杂的Windows系统管理任务,这样的书籍非常少见。显而易见,有大量关于Windows管理的书籍,也有大量关于Windows脚本设计的书籍。我是从DOS时代时接触计算机的,批处理可以算是我接触到的最早的“编程语言”,随着Windows时代的来临,批处理渐渐淡出我的视野,仅存一些陈旧的批处理记忆也是支离破碎的。此书映入我的眼帘时,感情上让我觉得倍感亲切,正好时间上还算空闲,就静下心来初读了几章,就被Windows命令行之丰富功能之强大唏嘘不已,Windows的每一个新版本都会对命令行做一些扩展与增强,这种持续的更新使得Windows命令行的性能与多功能性都得到了很大的改善。用现今的Windows版本可以使用命令行完成很多以前版本无法完成的任务。满怀着激动的心情,着手编写了一个实验性质的“批处理”脚本,没想自信满满的我,期间也摔了一个不大不小的跟头,让我不敢轻视这门“语言”了。


@echo off
@SETLOCAL
if not "%OS%"=="Windows_NT"  goto :eof
REM %~1扩展%1并删除任何引号 ("")。
if "%~1"=="" (set INFO=echo && set SEXIT=1) else (set INFO=REM && set SEXIT=0)
if "%2" neq "" (
	if /i "%2"=="/q" (set INFO=REM && set SEXIT=0 && set OPTIONS=1) else (set INFO=echo && set SEXIT=1)
)else (set OPTIONS=0)

%INFO% ***********************************************
%INFO% Script : Clean.bat
%INFO% Creation Date : 3/19/2014
%INFO% Last Modified : ?/??/????
%INFO% Author : 高玉涵
%INFO% E-mail : b_dx@sohu.com
%INFO% Env : CN_WindowsXP_SP3通过
%INFO% ***********************************************
%INFO% Description : 清除文件。
%INFO% -
%INFO% Clean.bat [drive:][path]filename [/Q]
%INFO% -
%INFO% [drive:][path]
%INFO%            访问指定的驱动器、目录下所有子目录,
%INFO%            默认访问当前目录下所有子目录。
%INFO% -
%INFO% filename
%INFO%            指定删除的文件名,不支持通配符。
%INFO% -
%INFO% /Q         安静模式。删除时,不要求确认。
%INFO% ""         双引号圈引带空格的路径。如:
%INFO%            Clean.bat "X:\My Documents\test.txt"
%INFO% ***********************************************
%INFO% Files : Stores output in Clean.log(删除日志)
%INFO% *********************************************** 

@if "%SEXIT%"=="1"  goto :eof
@TITLE "Start Clean..."
CLS
COLOR 07

REM 1.不允许出现通配符
echo %~1|FINDSTR "[*|?]" 1>NUL && echo [1:%~1]不允许使用通配符!&& goto :eof
REM 2.不允许字符串以\号结尾,[\\$(点用于忽略echo在行尾给的换行符)]
echo %~1|FINDSTR /i "\\$" 1>NUL && echo [2:%~1]未指定删除的文件名。 && goto :eof
PUSHD %~1 2>NUL && echo [3:%~1]未指定删除的文件名。&& POPD && goto :eof

set TARGET=%~1
set COUNT=0
set TOTAL=0

for /f "usebackq delims=" %%A in (`dir /a-d /b /s "%TARGET%"`) do (
	if exist "%%A" (
		@if "%OPTIONS%"=="1" (
			DEL /A "%%A"
			@if not exist "%%A" (set /a COUNT+=1 && set /a TOTAL+=%%~ZA && echo "%%A" >> Clean.log)
		) else (
			DEL /P /A "%%A"
			@if not exist "%%A" (set /a COUNT+=1 && set /a TOTAL+=%%~ZA && echo "%%A" >> Clean.log)
		)
	)
)
@ECHO 清除 %COUNT% 个文件 释放 %COUNT% 字节空间
@ENDLOCAL

脚本执行效果:
D:\Downloads>clean.bat "d:\My Documents\Dropbox\Thumbs.db" /q

Clean.bat按受两个参数,至少提供一个参数,如只给出了要清除的文件名,没有给出路径则在当前目录下寻找(含子目录),如路径中包含空格得用“”(双引号)圈起来。第二个参数只能是/Q(或/q),开启表示直接清除目标文件不提示(默认,清除目标文件前逐个让用户确认)。成功,提示清除的文件个数及回收多少空间(单位:字节)。

成功后的提示:

清除 17 个文件 释放 17 字节空间

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值