批处理脚本 - 根据单词重命名文件

Batch script - rename file based on words

抱歉,我是批处理脚本编程的新手。

问题

我想重命名 windows 目录中的一些文件。

示例文件如下(大小只是一个指标):

PP123_MQ_large.png    <- size: 30kb
PP123_MQ_medium.png   <- size: 50kb 
PP123_MQ_small.png    <- size: 60kb

PP666_MQ.png          <- size: 68kb

PP234_MQ3_small.png   <- size: 31kb

PP789_MQ2_large.png   <- size: 15kb

对于包含单词 large 的文件,我想将其重命名为 small

对于包含单词 small 的文件,我想将其重命名为 large

对于包含单词 medium 的文件,我希望它保持原样。

对于没有单词 smalllarge 的文件,我希望它保持原样。

预期结果

PP123_MQ_small.png     <- size: 30kb  changed to small
PP123_MQ_medium.png    <- size: 50kb  remain untouch because is medium
PP123_MQ_large.png     <- size: 60kb  changed to large

PP666_MQ.png           <- size: 68kb  remain untouch because no small or large

PP234_MQ3_large.png    <- size: 31kb  changed to large

PP789_MQ2_small.png    <- size: 15kb  changed to small

问题

以下是我的批处理脚本:

cd C:\Users\mydir
ren *_large.png *_tempsmall.png
ren *_small.png *_large.png
ren *_tempsmall.png *_small.png

但是对于只有small的文件,比如PP234_MQ3_small.png,它会生成额外的文件PP234_MQ3_large.png

对于只有large的文件,比如PP789_MQ2_large.png,会生成额外的文件PP789_MQ2_small.png.

我只想重命名现有文件,而不是生成额外的文件,我该如何改进我的脚本?

试一试:

cd /d "C:\users\mydir"
ren *_small.png *_large.png_tmp
ren *_large.png *_small.png_tmp
ren *.png_tmp *.png

我们将所有内容 small 移动到 large,将 _tmp 移动到扩展名,反之亦然。然后我们重命名所有文件删除 _tmp

此外,作为一项安全功能,如上所示使用 cd /d,如果是您自己的配置文件则更好,将 cd /d "c:\Users\mydir" 替换为 cd /d "%userprofile%"