标题: [文件操作] [分享]糟糕的BAT代码风格引发悲剧:文件分类变成了覆盖重命名 [打印本页]
作者: Batcher 时间: 2023-11-14 10:18 标题: [分享]糟糕的BAT代码风格引发悲剧:文件分类变成了覆盖重命名
【问题描述】
闲来无事写个批处理自动整理文件夹,运行逻辑是:检测当前文件夹里是否有各种类型的文件,如果有则对应创建文件夹,如果无则不创建。
把当前路径下各种文件移动到对应名称的文件夹中,并计数,反馈每种类型的文件各自移动了几个、总共移动了几个文件。
然后请AI写了代码,但是最后生成时,别的都能正常生成,反馈也没有报错,但是“图片”项成了一个无类型文件。
导致的悲剧:
图图,俺的图图,呜呜呜
整活时忘备份了,好多张学习资料图都冇了捏
作者: Batcher 时间: 2023-11-14 10:20
【原因分析】
这段脚本里面糟糕的代码风格有多处,我们集中看看导致悲剧的这一行:- if exist *.jpg if exist *.png if exist *.bmp mkdir /p "图片"
复制代码
问题1:
创建文件夹的时候 /p 参数在Linux系统里面某些情况下是有用的。
而Windows系统里面既不支持这个参数,也不需要这个参数。
应该修改为 md "图片"
问题2:
这句代码里面,多个if条件写在一行,是逻辑“且”的意思,而不是逻辑“或”。
也就是说:- if exist *.jpg if exist *.png if exist *.bmp md "图片"
复制代码
相当于:- if exist *.jpg (
- if exist *.png (
- if exist *.bmp (
- md "图片"
- )
- )
- )
复制代码
很明显这意味着需要同时存在jpg、png、bmp三种格式,它才会创建“图片”文件夹。
如果一开始就把脚本写成这个格式,也许使用者就不会被迷惑了吧。
运行代码的时候,由于只有一种或两种格式,“图片”文件夹没有被创建,于是:
move "%%i" "图片"
这里本来是想把文件移动到“图片”文件夹,结果实际是把文件重命名为“图片”。
可以修改成这样表示逻辑“或”:- if exist *.jpg (
- md "图片"
- )
- if exist *.png (
- md "图片"
- )
- if exist *.bmp (
- md "图片"
- )
复制代码
整个原始脚本里面类似的错误还有多处,这里不再赘述。
结论:
踏踏实实按照正确(也许是一种你觉得难看)的格式书写代码。
备份。备份。备份。
作者: Five66 时间: 2023-11-14 10:44
啊这,批处理吧看过的帖子
还有,真有人这样写代码么?
作者: buyiyang 时间: 2023-11-14 17:33
主要是move目标可以是目录也可以是文件,如果是目录的话最好这样写便于识别- move "[srcfile|srcfolder]" "desdir\"
复制代码
copy、xcopy我也会这样处理,防止出错。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |