Board logo

标题: [文本处理] 批处理自动建立文件夹和归集的问题 [打印本页]

作者: duoduo200    时间: 2022-5-20 19:15     标题: 批处理自动建立文件夹和归集的问题

各位大佬,
还是使用everything软件,需要可以直接操作,也就是有遍历功能,同时也不能指定路径和文件夹名字。
需求:
1、对音频文件所在的文件夹下,可以自动创建一个“单曲合辑”新文件夹,并把音频文件自动归集到该单曲合辑文件夹中。
2、判断,如果音频所在的文件夹的名字是小于等于4个汉字以内(包括4个汉字,8个字符)就建立“单曲合辑”文件夹并归集所有音频文件。如果是大于等于5个汉字及以上就自动退出,不执行。
3、音频文件为:WAV、flac、dts、dff、mp3、dsf、Ape

感谢大佬!
作者: zaqmlp    时间: 2022-5-20 20:53

本帖最后由 zaqmlp 于 2022-5-20 20:54 编辑
  1. @echo off
  2. set "newfolder=单曲合辑"
  3. if "%~1" equ "" (goto :end)
  4. if not exist "%~dp1" (echo;Path Error&goto :end) else (cd /d "%~dp1")
  5. for /f "delims=" %%a in ("%~dp1.") do set "current=%%~nxa"
  6. echo;"%current%"
  7. if /i "%current%" equ "%newfolder%" (goto :end)
  8. set count=0&for /f %%a in ('powershell -NoProfile -ExecutionPolicy bypass "write-host ([regex]::matches(\""%current%\"",'[\u4E00-\u9FA5]')).Count;"') do set "count=%%a"
  9. echo;%count%
  10. if %count% geq 5 (goto :end)
  11. for %%a in (.wav .flac .dts .dff .mp3 .dsf .ape) do (
  12.     if exist *%%a (
  13.         md "%newfolder%" 2>nul
  14.         move /y *%%a "%newfolder%\" 2>nul
  15.     )
  16. )
  17. :end
  18. pause
  19. exit
复制代码

作者: duoduo200    时间: 2022-5-23 17:08

回复 2# zaqmlp


    感谢大佬,是我想要的功能。给您支付宝付了一杯咖啡,感谢感谢
作者: duoduo200    时间: 2022-5-24 09:15

回复 2# zaqmlp


大佬,你写代码非常好用,但有的就失灵了,请看下图。

如图,明明上层文件夹是大于4个字及以上。
[img][/img]


但运行BAT后,依然可以建立单曲合辑。
[img][/img]

是不是因为上层文件夹名字有下划线或者字母数字没有计算进去,或者什么原因,麻烦帮忙看看哈。
作者: zaqmlp    时间: 2022-5-24 09:57

回复 4# duoduo200

这要看你怎么定义“汉字”
作者: duoduo200    时间: 2022-5-24 12:00

回复 5# zaqmlp


   大佬好! 定义字符吧,一个汉字等于两个字符,英文是一个字符,标点是一个字符,应该是这样的。是不是就能解决我们上面图片里的问题。
  也就是  文件夹的名字,如果等于及低于8个字符就再一个创建“单曲合辑”文件夹并自动归集,如果超过8个以上就不创建文件夹。
  非常感谢,辛苦了。
作者: zaqmlp    时间: 2022-5-24 12:07

2、判断,如果音频所在的文件夹的名字是小于等于4个汉字以内(包括4个汉字,8个字符)就建立“单曲合辑”文件夹并归集所有音频文件。如果是大于等于5个汉字及以上就自动退出,不执行。

看不懂你说什么,对于我来说,截图中只有3个"汉字",黄星侨
作者: zaqmlp    时间: 2022-5-24 14:22

修改第8行
  1. set count=0&for /f %%a in ('powershell -NoProfile -ExecutionPolicy bypass "$s=$env:current;$a=([regex]::matches($s,'[\x00-\xFF]')).Count;$b=([regex]::matches($s,'[^\x00-\xFF]')).Count;write-host ($a+2*$b)"') do set "count=%%a"
复制代码

作者: duoduo200    时间: 2022-5-24 19:32

回复 8# zaqmlp


    感谢大佬
作者: duoduo200    时间: 2022-5-24 20:05

回复 8# zaqmlp


   
[img][/img]

大佬,新的代码,用于上个图片里的专辑情况就好用,但对于这个图片却不好用了,没有建立和归集新建文件夹。
然后我用了第一次的那个代码,就可以用了。
能否把这两个代码综合起来一下。如果您有时间就辛苦帮忙看看哈。多谢多谢。
作者: zaqmlp    时间: 2022-5-24 20:56

抱歉看不懂你的需求,你到底怎么定义“汉字”,又是怎么判断个数的?
按你之前的定义,是3个“汉字”,然后你又说一个“汉字”算两个,你能不能组织好语言,完全搞不懂
作者: duoduo200    时间: 2022-5-25 13:55

回复 11# zaqmlp


不好意思大佬,我怕你不明白意思,所以解释过多,让你更糊涂了。
我精简一下如下:
   
判断 ,以音频所在文件夹的名字 为标准,
          是四个及以内汉字就创建《单曲合辑》文件夹,并自动把音频收集到该文件夹里即可。
           如果是五个及以上汉字就不创建,文件名里但凡有汉字有字母 或者 有汉字有数字的也都不创建。

大佬就这个意思。谢谢哈。
作者: zaqmlp    时间: 2022-5-25 15:42

回复 12# duoduo200
  1. @echo off
  2. set "newfolder=《单曲合辑》"
  3. if "%~1" equ "" (goto :end)
  4. if not exist "%~dp1" (echo;Path Error&goto :end) else (cd /d "%~dp1")
  5. for /f "delims=" %%a in ("%~dp1.") do set "current=%%~nxa"
  6. echo;"%current%"
  7. if /i "%current%" equ "%newfolder%" (goto :end)
  8. set flag=&for /f %%a in ('powershell -NoProfile -ExecutionPolicy bypass "$s=$env:current;if($s -match '^[\u4E00-\u9FA5]{1,4}$'){write-host 'true';}else{write-host 'false';}"') do set "flag=%%a"
  9. echo;%flag%
  10. if /i "%flag%" equ "flase" (goto :end)
  11. for %%a in (.wav .flac .dts .dff .mp3 .dsf .ape) do (
  12.     if exist *%%a (
  13.         md "%newfolder%" 2>nul
  14.         move /y *%%a "%newfolder%\" 2>nul
  15.     )
  16. )
  17. :end
  18. pause
  19. exit
复制代码

作者: duoduo200    时间: 2022-5-25 19:11

回复 13# zaqmlp


    感谢大佬!虽然还是没有解决,但依然感谢您!多谢多谢!
作者: duoduo200    时间: 2022-5-25 20:08

回复 15# zaqmlp


[img][/img]

大佬好,比如上图,这个音频所在的文件夹如红圈处叫 《阿桑-珍藏纪念版》,这已经是5个字及以上,按照需求是不用在创建单曲合辑 这个文件夹的,但现在依然可以创建哈。
作者: zaqmlp    时间: 2022-5-25 20:08

哪些文件夹名称没解决,列出几个看看,并加以判断说明,如
"蔡健雅"----3个"汉字"----需创建
"[Sony] - 黄星侨 - SINCE 1999 - 24-48"----3个"汉字"----有汉字有字母 或者 有汉字有数字,不创建
作者: zaqmlp    时间: 2022-5-25 20:14

第10行单词写错了if /i "%flag%" equ "flase" (goto :end),应为false
作者: duoduo200    时间: 2022-5-26 13:41

回复 17# zaqmlp


    感谢大佬出手,终于好用了




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