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

[文本处理] 批处理命令move中的通配符问题(bug?)

问题概述:
move的目标文件名包含通配符(*)时,匹配的文件不是希望的结果

输入:
同一目录下的漫画图片文件,文件名类似“XXX漫画第XX话”格式

需求:
根据文件名中“第XX话”建立子目录并把对应文件放入其中

期望的结果:
建立“第1话”、“第2话”等文件夹,并把文件名含有“第1话”、“第2话”的文件相应置入

实际的结果:
在“第k话”的文件夹中,除了包含“第k话”的文件,还会包含“第m话”、“第n话”等,m、n与k无明确联系。

复现步骤
复现测试如下:
  1. @echo on & cd/d %~dp0
  2. setlocal EnableDelayedExpansion
  3. for /l %%n in (352,1,356) do (
  4. echo .>%%n话_001.png
  5. echo .>%%n话_002.png
  6. echo .>%%n话_003.png
  7. echo .>%%n话_004.png
  8. echo .>%%n话_005.png
  9. )
  10. pause
  11. for /l %%i in (352,1,356) do (
  12. REM for /l %%i in (356,-1,352) do (
  13. mkdir %%i
  14. move %%i*.png %%i
  15. pause
  16. )
复制代码
以上测试运行后的第一次移动结果为:
  1. (
  2. mkdir 352
  3. move 352*.png 352
  4. pause
  5. )
  6. Q:\Down\cmd bug\353话_005.png
  7. Q:\Down\cmd bug\355话_005.png
  8. Q:\Down\cmd bug\356话_005.png
  9. Q:\Down\cmd bug\352话_001.png
  10. Q:\Down\cmd bug\352话_002.png
  11. Q:\Down\cmd bug\352话_003.png
  12. Q:\Down\cmd bug\352话_004.png
  13. Q:\Down\cmd bug\352话_005.png
  14. 移动了         8 个文件。
复制代码
move 352*.png 352这行居然把353、355、356话的第5页也移动进去了,这是为什么?

此外,偶然发现,如果将测试中for 从正序改为逆序(将rem掉的一行取消rem,原for行 rem掉),则不会出现此问题,这又是什么情况?

自顶. 半个月了一个知道的人都没有?

TOP

回复 4# xxpinqz


    有意思, 换成非中文就没问题了
但是实际操作的文件名没有这么简单, 所以不能用第二个方法, bat又不支持正则
另外逆序也能解决问题. 依然不清楚是由于汉字引起的, 还是正序时通配符的bug引起的

TOP

返回列表