Board logo

标题: [文本处理] [已解决]如何将多个bat文件合在一起,源码已添加帖子里。 [打印本页]

作者: duoduo200    时间: 2022-4-14 20:36     标题: [已解决]如何将多个bat文件合在一起,源码已添加帖子里。

本帖最后由 duoduo200 于 2022-4-20 09:21 编辑

各位大佬,我有5T无损音乐,杂七杂八需要整理归类。为了快速省力整理,在网上学到好几个bat批处理代码,都非常好用,但需要一个个放在当前文件夹里用太麻烦,所以想是否可以弄成一个,不知道大佬能否告知或者优化。
描述:
用everything搜索需要整理的文件夹 output,每一个都需要我整理
[img][/img]
打开其中一个就是如下图
[img][/img]
然后把这5个bat放在当前文件夹下
[img][/img]
依次点击第01bat开始到第05个,自动删除所有bat结束
[img][/img]
直到如下图,只有音乐文件为止。
[img][/img]

描述背景结束。
目前使用的bat源码,也是依次排序如下,从01-05个bat。
1、提取选中文件夹下的所有文件移动到上层目录:
@echo off
for /f "delims=" %%a in ('dir /a-d /b /s ') do (
move "%%~a" ./ 2>nul
)

2、删除当前文件夹下要删除的子文件夹名称
@echo off
cd /d "%~dp0"
for /f "delims=" %%i in ('dir /b /ad ^| findstr "子文件名称"') do (
    rd /s /q "%%i"
)
3、删除指定名文件
@echo off
cd /d "%~dp0"
for /f "delims=" %%i in ('dir /b /s /a-d "CDImage.wav" "CDImage.cue"') do (
    del /f /q "%%i"
)
4、删除当前空文件夹
@echo off
for /f "delims=" %%a in ('dir/s/ad/b^|sort /r') do (
echo,rd "%%a"&&rd "%%a"
)
pause
5、删除所有bat文件
for /f "delims=" %%A in ('where /f .:*.bat') do @del /f /q %%A

所有源文件代码结束。
想要的效果:
1、如上面描述背景中我所做的事情就是我想要的结果,请各位大佬给意见,但代码不要写指定文件夹,因为文件我要搬来搬去,无法长期固定在某个文件夹或者盘符下。
2、是否可以整合成一个test.bat,最好能优化一下,把test批处理放在output文件夹下,点击一下就自动运行从01-05bat。得到的结果就是我最后一个图。
延展效果:
整合后的test.bat能否直接放在我的鼠标右键菜单里,因为我现在就是这么弄的提取下层文件夹内文件,并设置了快捷建B。如下图。
[img][/img]

以上,请各位版主、管理大大帮助,非常感谢。
作者: went    时间: 2022-4-14 21:12

本帖最后由 went 于 2022-4-15 18:52 编辑

test.bat ,ansi编码
放到任意位置,双击添加或删除右键菜单
  1. @echo off
  2. if not "%~1"=="" if not "%~1"=="REM" goto :handle
  3. REM 管理员权限
  4. %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","REM",,"runas",1)(window.close)&exit
  5. REM 文件夹右键菜单名称,快捷键,图标
  6. set "menu_name=一键操作"
  7. set "menu_hotkey=W"
  8. set "menu_ico="F:\Picture\Data\WIN32.ico""
  9. REM 没有则添加,有则删除
  10. reg delete "HKCR\Directory\shell\%menu_name%" /f 2>nul && (
  11. echo 删除右键菜单 %menu_name% 成功
  12. ) || (
  13. reg add "HKCR\Directory\shell\%menu_name%" /ve /d "%menu_name%(&%menu_hotkey%)"
  14. reg add "HKCR\Directory\shell\%menu_name%" /v "icon" /d "%menu_ico%"
  15. reg add "HKCR\Directory\shell\%menu_name%\command" /ve /d "\"%~0\" \"%%1\"" /f
  16. echo 添加右键菜单 %menu_name% 成功
  17. )
  18. pause&exit
  19. :handle
  20. if not exist "%~1\" echo ( 文件夹路径无效 & pause&exit )
  21. cd /d "%~dp1"
  22. REM 提取选中文件夹下的所有文件移动到上层目录
  23. for /f "delims=" %%a in ('dir /a-d /b /s ') do move "%%~a" . 2>nul
  24. REM 删除当前文件夹下要删除的子文件夹名称
  25. for /f "delims=" %%i in ('dir /b /ad ^| findstr "子文件名称"') do rd /s /q "%%i"
  26. REM 删除指定名文件
  27. for /f "delims=" %%i in ('dir /b /s /a-d "CDImage.wav" "CDImage.cue"') do del /f /q "%%i"
  28. REM 删除当前空文件夹
  29. for /f "delims=" %%a in ('dir/s/ad/b^|sort /r') do (echo,rd "%%a" & rd "%%a")
  30. pause&exit
复制代码

作者: duoduo200    时间: 2022-4-15 08:31

本帖最后由 duoduo200 于 2022-4-15 08:59 编辑

回复 2# went

感谢大佬!
但没用呢,也保存为na格式了,但只出现CMD界面,点击任意键开始,并没有开始运行任何BAT。然后就没然后了。是否因为这5个bat需要时间间隔,因为单独运行结果时候,都需要个时间跑完。
界面如下:
[img][/img]
作者: duoduo200    时间: 2022-4-15 09:02

回复 2# went

然后我用uf-8的原本格式保存代码,又试验了一下,还是不行,但出现了以下删除注册表的问题,如下图。

[img][/img]
作者: qixiaobin0715    时间: 2022-4-15 10:08

将下面代码放在要处理的文件的最上层目录中(比如“无损音乐”文件夹下),保存为ANSI编码,并注意备份好源文件:
  1. @echo off
  2. for /f "delims=" %%i in ('dir /s /b /ad output') do (
  3.     pushd "%%~dpi"
  4.     for /f "delims=" %%j in ('dir /s /b /ad^|sort /r') do (
  5.         move "%%j\*.*">nul 2>nul
  6.         rd "%%j"
  7.     )
  8.     for /f "delims=" %%k in ('dir /b /a-d^|findstr /ve "wav"') do del "%%k"
  9.     del CDImage.wav
  10.     popd
  11. )
  12. pause
复制代码
未经测试。
作者: duoduo200    时间: 2022-4-15 10:47

回复 5# qixiaobin0715


    感谢感谢!非常好用哈。可能我想要的比较多,您这个只实现部分删除功能哈。同样非常感谢。
作者: qixiaobin0715    时间: 2022-4-15 10:49

哪些没实现删除?
作者: duoduo200    时间: 2022-4-15 11:10

回复 7# qixiaobin0715


    你好大佬。我是想把01-05bat的功能都整合一起实现哈。
作者: duoduo200    时间: 2022-4-15 11:14

回复 2# went


    感谢大佬,是我没有理解代码,非常好用,感谢感谢!
作者: duoduo200    时间: 2022-4-15 16:29

回复 2# went

大佬,能不能在这个代码里,添加以下的路径和内容。这样有快捷方式和图标,便于快速选择哈。辛苦辛苦
[img][/img]

以下是在您的代码上,我又手动添加的,形成了最终效果。之所以想请您帮忙添加,是如果换了台电脑我还得重来一遍图标和快捷键添加。

[img][/img]

以上感谢Went
作者: went    时间: 2022-4-15 18:52

回复 10# duoduo200


    2楼已更新,修改6-8行
作者: duoduo200    时间: 2022-4-15 19:14

回复 11# went


    感谢大佬出手,非常感谢
作者: duoduo200    时间: 2022-4-21 08:54

回复 11# went


大佬,在实战中,出现CDImage 1.wav 等多个就无法删除了,能否变成只要有CDImage名字, 不管几个都可以删除。

[img][/img]
作者: went    时间: 2022-4-21 12:17

回复 13# duoduo200


    27行改为
  1. for /r %%i in ("*CDImage*") do del /f /q "%%i"
复制代码





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