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

[文本处理] 批处理自动建立文件夹和归集的问题

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

感谢大佬!

本帖最后由 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
复制代码
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

回复 2# zaqmlp


    感谢大佬,是我想要的功能。给您支付宝付了一杯咖啡,感谢感谢

TOP

回复 2# zaqmlp


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

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


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

是不是因为上层文件夹名字有下划线或者字母数字没有计算进去,或者什么原因,麻烦帮忙看看哈。

TOP

回复 4# duoduo200

这要看你怎么定义“汉字”
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

回复 5# zaqmlp


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

TOP

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

看不懂你说什么,对于我来说,截图中只有3个"汉字",黄星侨
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

修改第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"
复制代码
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

回复 8# zaqmlp


    感谢大佬

TOP

回复 8# zaqmlp


   
[img][/img]

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

TOP

抱歉看不懂你的需求,你到底怎么定义“汉字”,又是怎么判断个数的?
按你之前的定义,是3个“汉字”,然后你又说一个“汉字”算两个,你能不能组织好语言,完全搞不懂
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

回复 11# zaqmlp


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

大佬就这个意思。谢谢哈。

TOP

回复 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
复制代码
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

回复 13# zaqmlp


    感谢大佬!虽然还是没有解决,但依然感谢您!多谢多谢!

TOP

回复 15# zaqmlp


[img][/img]

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

TOP

返回列表