[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [分享]糟糕的BAT代码风格引发悲剧:文件分类变成了覆盖重命名

【问题描述】

闲来无事写个批处理自动整理文件夹,运行逻辑是:检测当前文件夹里是否有各种类型的文件,如果有则对应创建文件夹,如果无则不创建。
把当前路径下各种文件移动到对应名称的文件夹中,并计数,反馈每种类型的文件各自移动了几个、总共移动了几个文件。
然后请AI写了代码,但是最后生成时,别的都能正常生成,反馈也没有报错,但是“图片”项成了一个无类型文件。



导致的悲剧:

图图,俺的图图,呜呜呜
整活时忘备份了,好多张学习资料图都冇了捏
1

评分人数

    • 77七: 感谢分享技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

【原因分析】

这段脚本里面糟糕的代码风格有多处,我们集中看看导致悲剧的这一行:
  1. if exist *.jpg if exist *.png if exist *.bmp mkdir /p "图片"
复制代码
问题1:

创建文件夹的时候 /p 参数在Linux系统里面某些情况下是有用的。
而Windows系统里面既不支持这个参数,也不需要这个参数。
应该修改为 md "图片"

问题2:

这句代码里面,多个if条件写在一行,是逻辑“且”的意思,而不是逻辑“或”。
也就是说:
  1. if exist *.jpg if exist *.png if exist *.bmp md "图片"
复制代码
相当于:
  1. if exist *.jpg (
  2.     if exist *.png (
  3.         if exist *.bmp (
  4.             md "图片"
  5.         )
  6.     )
  7. )
复制代码
很明显这意味着需要同时存在jpg、png、bmp三种格式,它才会创建“图片”文件夹。
如果一开始就把脚本写成这个格式,也许使用者就不会被迷惑了吧。

运行代码的时候,由于只有一种或两种格式,“图片”文件夹没有被创建,于是:
move "%%i" "图片"
这里本来是想把文件移动到“图片”文件夹,结果实际是把文件重命名为“图片”。

可以修改成这样表示逻辑“或”:
  1. if exist *.jpg (
  2.     md "图片"
  3. )
  4. if exist *.png (
  5.     md "图片"
  6. )
  7. if exist *.bmp (
  8.     md "图片"
  9. )
复制代码
整个原始脚本里面类似的错误还有多处,这里不再赘述。

结论:

踏踏实实按照正确(也许是一种你觉得难看)的格式书写代码。
备份。备份。备份。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

啊这,批处理吧看过的帖子
还有,真有人这样写代码么?

TOP

主要是move目标可以是目录也可以是文件,如果是目录的话最好这样写便于识别
  1. move "[srcfile|srcfolder]" "desdir\"
复制代码
copy、xcopy我也会这样处理,防止出错。
1

评分人数

    • 77七: 感谢分享技术 + 1

TOP

返回列表