标题: [文本处理] 批处理自动建立文件夹和归集的问题 [打印本页]
作者: 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 编辑
- @echo off
- set "newfolder=单曲合辑"
- if "%~1" equ "" (goto :end)
- if not exist "%~dp1" (echo;Path Error&goto :end) else (cd /d "%~dp1")
- for /f "delims=" %%a in ("%~dp1.") do set "current=%%~nxa"
- echo;"%current%"
- if /i "%current%" equ "%newfolder%" (goto :end)
- set count=0&for /f %%a in ('powershell -NoProfile -ExecutionPolicy bypass "write-host ([regex]::matches(\""%current%\"",'[\u4E00-\u9FA5]')).Count;"') do set "count=%%a"
- echo;%count%
- if %count% geq 5 (goto :end)
- for %%a in (.wav .flac .dts .dff .mp3 .dsf .ape) do (
- if exist *%%a (
- md "%newfolder%" 2>nul
- move /y *%%a "%newfolder%\" 2>nul
- )
- )
- :end
- pause
- 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行- 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 - @echo off
- set "newfolder=《单曲合辑》"
- if "%~1" equ "" (goto :end)
- if not exist "%~dp1" (echo;Path Error&goto :end) else (cd /d "%~dp1")
- for /f "delims=" %%a in ("%~dp1.") do set "current=%%~nxa"
- echo;"%current%"
- if /i "%current%" equ "%newfolder%" (goto :end)
- 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"
- echo;%flag%
- if /i "%flag%" equ "flase" (goto :end)
- for %%a in (.wav .flac .dts .dff .mp3 .dsf .ape) do (
- if exist *%%a (
- md "%newfolder%" 2>nul
- move /y *%%a "%newfolder%\" 2>nul
- )
- )
- :end
- pause
- 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://www.bathome.net/) |
Powered by Discuz! 7.2 |