[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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


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

本帖最后由 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
复制代码
1

评分人数

TOP

用正则匹配
  1. ^([^\x00-\xff]|[A-Z])+(?=-)?
复制代码
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

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



    感谢回复。。。但你这个毫无反应

TOP

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



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

理论结果应该是把含有朱雀记文件名的文件放进朱雀记文件夹里

TOP

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


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

TOP

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

TOP

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



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

TOP

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

回复 8# 8532200 已修改再试试

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

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

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

返回列表