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

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

本帖最后由 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


求解决。。实在是找不到方法。。目前用的是上面的代码。。但不好用

回复  8532200

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



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

TOP

回复 1# 8532200

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

TOP

回复  8532200


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



    13楼已经基本解决了。。加上一楼那个我自己找到的代码就基本可以做到大部分了。。。感激不尽

TOP

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



    实测你的貌似好用一点。。。我还没对比。。。粗略一看貌似差不多。。非常感谢你的回复

TOP

回复 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. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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



    不是。。。。文件名会有些许变动。楼上其实已经解决我说的问题。。。只是没办法完美

TOP

如果文件名仅限于你列出的那样,试试下面的代码:
  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
复制代码
1

评分人数

TOP

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



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

TOP

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



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

TOP

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



    实测还是和之前的一样。。只创建了空白文件夹。。。。

TOP

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

回复 8# 8532200 已修改再试试

TOP

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



    我默认就是ansi。实测确实毫无用处。。。只创建了一些空白文件夹

TOP

回复 5# 8532200
另存为ANSI编码再试试

TOP

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


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

TOP

返回列表