Board logo

标题: [文本处理] 【已解决】批处理怎么解决相似文件名怎么才能完美分类 [打印本页]

作者: 8532200    时间: 2020-7-24 13:13     标题: 【已解决】批处理怎么解决相似文件名怎么才能完美分类

本帖最后由 8532200 于 2020-7-24 22:46 编辑

找了足足两个小时。才找到这个不完美的解决方法
  1. @echo off
  2. rem 将多个文件剪切/移动到以该文件名称开头前几位字符命名的文件夹里
  3. set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
  4. title %#% +%$%%$%/%@% %z%
  5. cd /d "%~dp0"
  6. set len=4
  7. for /f "delims=" %%a in ('dir /a-d/b') do (
  8.     if /i "%%~nxa" neq "%~nx0" (
  9.         set "base=%%~na"&set "file=%%a"
  10.         setlocal enabledelayedexpansion
  11.         if not exist "!base:~0,%len%!\" (md "!base:~0,%len%!\")
  12.         echo;"!file!" --^> "!base:~0,%len%!\"
  13.         move "!file!" "!base:~0,%len%!\"
  14.         endlocal
  15.     )
  16. )
  17. :end
  18. echo;%#% +%$%%$%/%@% %z%
  19. pause
  20. exit
复制代码
不过以上代码只能截取前六位字符相同的文件名自动分类












比如我有很多txt,文件名是
朱雀记001.txt
朱雀记002.txt
朱雀记003.txt

重生之文豪野犬001.txt
重生之文豪野犬002.txt
重生之文豪野犬003.txt

犬夜叉-001.txt
犬夜叉-002.txt
犬夜叉-003.txt


CCTVVIDEO-001.TXT
CCTVVIDEO-002.TXT
CCTVVIDEO-003.TXT


文件太多了。。没有什么大的规则。。。唯一规则是很多文件名是类似的,求问怎么才可以自动分类创建目录
最后结果是

朱雀记
重生之文豪野犬
犬夜叉
CCTVVIDEO


求解决。。实在是找不到方法。。目前用的是上面的代码。。但不好用
作者: smss    时间: 2020-7-24 14:13

本帖最后由 smss 于 2020-7-24 16:59 编辑
  1. @Echo off&SetLocal EnableDelayedExpansion
  2. for /f "delims=" %%i in ('dir /b/s *.txt ^|find /V "-"')do set "n=%%~nxi"&ren "%%i" "!n:~0,-7!-!n:~-7!"
  3. for /f "tokens=1,2 delims=-" %%i in ('dir /b/s *-*.txt')do (if not exist "%%~ni" md "%%~ni"
  4. move "%%i-%%j" "%%~ni")
  5. pause
复制代码

作者: ivor    时间: 2020-7-24 14:27

用正则匹配
  1. ^([^\x00-\xff]|[A-Z])+(?=-)?
复制代码

作者: 8532200    时间: 2020-7-24 14:54

用正则匹配
ivor 发表于 2020-7-24 14:27



    感谢回复。。。但你这个毫无反应
作者: 8532200    时间: 2020-7-24 14:57

smss 发表于 2020-7-24 14:13



    非常感谢回复。。实测毫无用处。。。只创建了同名文件夹(例如朱雀记001)。。甚至没有把txt放进去

理论结果应该是把含有朱雀记文件名的文件放进朱雀记文件夹里
作者: 8532200    时间: 2020-7-24 15:10

用正则匹配
ivor 发表于 2020-7-24 14:27


  实际测试了一下。。。。这段代码需要改为^([^\x00-\xff]|[A-Z])+
才可以对txt正则。。。但我这个不是修改txt里面的文字。。。而是需要分类文件
作者: smss    时间: 2020-7-24 17:02

回复 5# 8532200
另存为ANSI编码再试试
作者: 8532200    时间: 2020-7-24 18:33

回复  8532200
另存为ANSI编码再试试
smss 发表于 2020-7-24 17:02



    我默认就是ansi。实测确实毫无用处。。。只创建了一些空白文件夹
作者: smss    时间: 2020-7-24 20:21

本帖最后由 smss 于 2020-7-24 20:23 编辑

回复 8# 8532200 已修改再试试
作者: 8532200    时间: 2020-7-24 20:28

回复  8532200 已修改再试试
smss 发表于 2020-7-24 20:21



    实测还是和之前的一样。。只创建了空白文件夹。。。。
作者: 8532200    时间: 2020-7-24 20:31

回复  8532200 已修改再试试
smss 发表于 2020-7-24 20:21



    我知道为何出错了。。。我测试了朱雀记001,002成功了。。。但是小说有很多文件名。。。看起来没办法做到完美分类了。。。只要稍微不同就不行
作者: 8532200    时间: 2020-7-24 20:33

回复  8532200 已修改再试试
smss 发表于 2020-7-24 20:21



    简单说。目前你这个代码没办法做到我说的相近字符就分类。需要一些条件。。看起来还是需要手动调节。。。或者可以配合我找到的那个代码来使用了。。。
作者: qixiaobin0715    时间: 2020-7-24 22:29

如果文件名仅限于你列出的那样,试试下面的代码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /r %%i in ("*.txt")do (
  4.   set "Name=%%~nxi"
  5.   if "!Name:~-8,1!" == "-" (
  6.     if not exist "!Name:~0,-8!" md "!Name:~0,-8!"
  7.     move /-y "%%i" "!Name:~0,-8!"
  8.   ) else (
  9.     if not exist "!Name:~0,-7!" md "!Name:~0,-7!"
  10.     move /-y "%%i" "!Name:~0,-7!"
  11.   )
  12. )
  13. pause
复制代码

作者: 8532200    时间: 2020-7-24 22:37

如果文件名仅限于你列出的那样,试试下面的代码:
qixiaobin0715 发表于 2020-7-24 22:29



    不是。。。。文件名会有些许变动。楼上其实已经解决我说的问题。。。只是没办法完美
作者: Batcher    时间: 2020-7-24 22:39

回复 1# 8532200


试试 BAT + sed 的方法:
http://bcn.bathome.net/s/tool/index.html?key=sed
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  3.     for /f "delims=" %%j in ('echo %%i^|sed -r "s/^([^\x00-\xff]+).*/\1/; s/^([A-Z]+).*/\1/"') do (
  4.         if not exist "%%j" (
  5.             md "%%j"
  6.         )
  7.         move /y "%%i" "%%j"
  8.     )
  9. )
复制代码

作者: 8532200    时间: 2020-7-24 22:44

如果文件名仅限于你列出的那样,试试下面的代码:
qixiaobin0715 发表于 2020-7-24 22:29



    实测你的貌似好用一点。。。我还没对比。。。粗略一看貌似差不多。。非常感谢你的回复
作者: 8532200    时间: 2020-7-24 22:45

回复  8532200


试试 BAT + sed 的方法:
Batcher 发表于 2020-7-24 22:39



    13楼已经基本解决了。。加上一楼那个我自己找到的代码就基本可以做到大部分了。。。感激不尽
作者: qixiaobin0715    时间: 2020-7-25 10:20

回复 1# 8532200

表述问题一定要清楚,否则别人想帮你也帮不到。
就你提出的问题:
1.要说明文件名相同部分的特征,比如是否象你列举的全部由中文和英文字母组合而成,是否还有别的字符;
2.分界点前后字符有何特征;
3.后面不同部分是否都是有类似-001、-002或001、002构成。
你想到的特征都要尽量表达出来。
作者: 8532200    时间: 2020-7-25 10:31

回复  8532200

表述问题一定要清楚,否则别人想帮你也帮不到。
就你提出的问题:
1.要说明文件名相同 ...
qixiaobin0715 发表于 2020-7-25 10:20



    谢谢。已经解决了。。主要是txt文件名变数太多。。。没办法全部列举。。只能列举部分。稍微一丁点变动bat就出错。。而且就连上面最完美的也没办法做到完美。。毕竟变数太多。。说出来也没用。。。批处理不是万能的。。还是需要灵活使用




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2