【批处理】将Windows备份后的文件批量改名

Windows备份会自动给所有文件加上时间戳的信息。对于机器来讲它可以区分不同时刻的备份。而对于人来说看上去十分蛋疼。现在要做的就是用Windows的批处理给它们重命名,摆脱冗长的累赘!

去年12月的时候想要做一个这样的东西,拖到现在才完成了一个简单的版本。原因在于Windows批处理实在太难用。作为M$的亲生儿子,却不教它怎样方便用户使用。命令功能低下,帮助文档也很晦涩。然而功夫不负有心人,终于利用批处理各种特性写出了一个能够拿来简单用一用的东西。


直接上代码:

@echo off
setlocal enabledelayedexpansion
for %%a in ("*") do ( 
        set str=%%a
        set ini=%%a
        set i=0
	set ind=0
	set new=
	call :lp
)
pause
exit /b
::process string
:lp
if not "!str!"=="" (
	set "ch=!str:~0,1!"
	set "str=!str:~1!" ::cut
	if "!ch!"==" " (
		set ind=1
	) else ( 
		if !ind!==1 (
		if "!ch!"=="(" (
			set ind=10
			goto fin
		) else set ind=0 )
			)
	set new=!new!!ch!
	set /a i=i+1
	goto lp
)
exit /b
:fin
if !ind!==10 (
	set new=!new:~0,-1!
	
	set str=!str:~24!
	set new=!new!!str!
	echo RENAME: !new!
	ren "!ini!" "!new!"
)
exit /b

使用方法:新建文本文档,复制粘贴以上内容。保存并关闭,将该文档重命名为.bat格式并存放在要修改文件名的目录下,双击即可运行。

功能:修改所有当前文档下被Windows污染的文件名

警告:该程序替换的原理是识别一个空格和一个左括号,将到右括号中间的内容全部删除。另外,同一文件夹下不能有原文件名相同的文件。


运行效果:





================================分割线====================================

M$这么多年了,也不学学人家Unix。人一个Perl脚本命令的rename自带正则匹配的功能。Windows批处理的替换只能替换特定文本,要使用正则表达式必须用findstr。这个findstr还无法提取指定文本,只能打印出所在行,与Unix的grep命令类似。于是,只好使用最原始的办法,逐字符的截短字符串并匹配,十分痛苦。

本次的小程序让我学会了不少批处理的原理与技巧,包括延时变量、字符串截取、goto与call,等等。深刻地验体验到了DOS时代程序员的生活。有着像Unix一样开源的系统是多么幸福呀。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值