利用批处理为文件创建目录并移动文件到目录中

整理收集的电影文件,其中有些是单独文件夹,有些则没有独立文件夹,不够统一,所以自然想到都设置成每个电影独立文件夹存储。手动操作会麻烦些,利用批处理则可以简单许多。

因为电影文件名已经比较有规律,一般是“中文名.英文名.年份.XXXX.XXX”之类样式。原打算利用批处理的字符串处理来截取“中文名.英文名.年份”作为目录名,不过发现英文名中单词也是用逗点分隔,无法利用分隔符的方式截取,自己能想到的就是正则表达式,可是批处理中如何实现还不了解。后来想到的方法是用“DIR /B /A-D>files.txt”命令把文件名先输出到文本中,利用notepad++的正则表达式编辑自己想要的效果作为目录名。然后利用以下脚本来创建目录并移动文件。

@echo off&setlocal enabledelayedexpansion 
for /f %%a in (files.txt) do ( set "mulu=%%a"
	echo mkdir !mulu!
	mkdir "!mulu!"
	for /f %%f in ('DIR /B /A-D') do ( set "file=%%f"
		echo "!file!"|find "!mulu!">nul&&set EXISTS_FLAG=true
		if !EXISTS_FLAG!==true ( 
			move "!file!" "!mulu!"
			echo move !file! to !mulu!
			set EXISTS_FLAG=false
		)
	)
)
pause>nul

这段代码能实现我想要的功能,唯一问题就是效率太低了,几百个文件,移动一个文件需要十几秒。大概是因为循环没有break导致的大量无用循环,批处理里跳出循环好像还蛮复杂,而且我要移动到目录中的文件有时不只一个,也没法打断,只能如此了。

猜你喜欢

转载自blog.csdn.net/mi2006/article/details/87902797