Board logo

标题: [文件操作] [已解决]批处理怎样遍历文件夹删除目标文件? [打印本页]

作者: duoduo200    时间: 2022-4-24 08:31     标题: [已解决]批处理怎样遍历文件夹删除目标文件?

本帖最后由 duoduo200 于 2022-4-26 15:24 编辑

各位大佬!
在用everthing搜索时候,我把所有要处理的文件搜索出来了,想在上面直接执行。之前的提取文件夹下的内容都可以穿透执行,不用点开文件所在的文件夹再运行bat,非常方便。
qixiaobin大大帮我写了代码,但无法遍历穿透执行。能否像类似图片中删除键一样可以直接穿透执行。(同样不要指定路径,总是搬来搬去)
请各位大佬帮忙修改,是否能遍历到文件所在的文件夹直接执行以下的代码。
不知道我是否阐述清楚,请见谅。谢谢。

[img][/img]
  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=Z"
  8. set "menu_ico="F:\Picture\Data\WIN32.ico""
  9. REM 没有则添加,有则删除
  10. reg delete "HKCR\*\shell\%menu_name%" /f 2>nul && (
  11.         echo 删除右键菜单 %menu_name% 成功
  12. ) || (
  13.         reg add "HKCR\*\shell\%menu_name%" /ve /d "%menu_name%(&%menu_hotkey%)"
  14.         reg add "HKCR\*\shell\%menu_name%" /v "icon" /d "%menu_ico%"
  15.         reg add "HKCR\*\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. setlocal enabledelayedexpansion
  22. set n=0
  23. for /f "delims=" %%a in ('dir /s /b /a-d') do if %%~za gtr !n! (set n=%%~za&set filename=%%a)
  24. del "%filename%"
  25. del /s /q *.cue
  26. exit
复制代码

作者: qixiaobin0715    时间: 2022-4-24 10:00

不明白你说的这句“但无法遍历穿透执行”是什么意思。
作者: duoduo200    时间: 2022-4-24 10:38

回复 2# qixiaobin0715


   是指如图用Evething搜索出来的文件,无法直接在everthing上操作。无任何反应,需要点进进文件所在的文件夹操作bat才好用。

everything搜出要处理的文件,右键如图无法运行,表现为点击后无任何操作。(删除最大文件,就是上面您的代码)
[img][/img]

只有点击进该文件进入文件夹界面才能运行(删除最大文件)的bat。

作者: qixiaobin0715    时间: 2022-4-24 11:14

本帖最后由 qixiaobin0715 于 2022-4-24 11:16 编辑

回复 1# duoduo200
以前未使用过参数变量。你把代码22~23行之间插入:
  1. echo,%cd%
  2. pause
复制代码
将目标文件拖到批处理文件上,看看显示的路径是否是你要的路径。
作者: duoduo200    时间: 2022-4-24 11:27

回复 4# qixiaobin0715

大佬,如图,还是不太行,只是找到了everthing软件的目录,而非目标文件。依然无法执行删除式样里这两个文件。
[img][/img]
作者: qixiaobin0715    时间: 2022-4-24 11:38

本帖最后由 qixiaobin0715 于 2022-4-24 11:41 编辑

加上这2行的目的只是验证一下当前目录的实际路径而不是解决问题,这就是问题的症结。可能是everthing软件将搜索列表放在了自身目录而非实际目录,所以才会出现问题。
你这样利用everthing软件操作是无效的。
作者: qixiaobin0715    时间: 2022-4-24 12:35

本帖最后由 qixiaobin0715 于 2022-4-24 12:49 编辑

回复 5# duoduo200
如果要处理的文件都在一个大的文件夹下,子文件都需要作同样的处理,可能会有更方便的办法一次性全部处理,不需要一个个的右击选择菜单分别运行批处理。
你需要提供两个不同的.cue文件的真实路径,以便了解其目录结构。
作者: zaqmlp    时间: 2022-4-24 12:48

回复 7# qixiaobin0715


    应该echo;"%~dp1",右键菜单的"发送到"支持传递多选文件到一个进程
作者: went    时间: 2022-4-24 13:30

  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=Z"
  8. set "menu_ico="F:\Picture\Data\WIN32.ico""
  9. REM 没有则添加,有则删除
  10. reg delete "HKCR\*\shell\%menu_name%" /f 2>nul && (
  11.         echo 删除右键菜单 %menu_name% 成功
  12. ) || (
  13.         reg add "HKCR\*\shell\%menu_name%" /ve /d "%menu_name%(&%menu_hotkey%)"
  14.         reg add "HKCR\*\shell\%menu_name%" /v "icon" /d "%menu_ico%"
  15.         reg add "HKCR\*\shell\%menu_name%\command" /ve /d "\"%~0\" \"%%1\"" /f
  16.         echo 添加右键菜单 %menu_name% 成功
  17. )
  18. pause&exit
  19. :handle
  20. echo %cd%
  21. if not exist "%~dp1\" echo ( 文件路径无效 & pause&exit )
  22. setlocal enabledelayedexpansion
  23. cd /d "%~dp1" & set "n=0"
  24. for /r %%i in (*) do if %%~zi gtr !n! ( set "n=%%~zi" & set "filename=%%~i" )
  25. del "%filename%"
  26. del /s /q *.cue
  27. exit
复制代码

作者: duoduo200    时间: 2022-4-24 14:28

回复 9# went


    感谢went大佬!非常好用。
请大佬给我一个收款账号,给您买杯咖啡表达心意。
作者: duoduo200    时间: 2022-4-24 14:30

回复 7# qixiaobin0715


    感谢bin大佬,went大佬代码达到咱提的需求了哈。

另外,请您给我一个支付账号,买杯咖啡给您,表达心意哈。
作者: duoduo200    时间: 2022-4-24 14:30

回复 8# zaqmlp


    感谢您的回复。
作者: duoduo200    时间: 2022-4-25 14:37

回复 9# went


    大佬,能不能在您的代码上加入一个判断代码,就是如果.cue所在的文件夹里数量有≥三个以上.wav后缀的文件  或者 ≥三个以上.APE后缀的文件 或者 ≥三个以上.Flac 后缀的文件这种音频格式 (他们都是或的关系,也就是有他们wav/APE/FLAC任意一种就算),
然后如果大于等于3个及以上就执行您的代码,小于就不执行您的代码,全部退出即可。

因为文件夹里有的压缩包已经解压了,有的是未解压。上述就是为了识别是否解压了,解压了就删除压缩包就好了。如果是未解压的就退出来,我在手动一个个解压。(这里的压缩包不是rar,是指音频整轨文件,是为了便于理解哈。)
作者: zaqmlp    时间: 2022-4-25 16:19

  1. ……
  2. ……
  3. pause&exit
  4. :handle
  5. if not exist "%~dp1" ( echo;"%~dp1" 路径错误或不存在 &pause&exit )
  6. cd /d "%~dp1" & set "n=0" & set "check="
  7. setlocal enabledelayedexpansion
  8. for %%a in (wav ape flac) do (
  9.     set c=0&for /r %%b in (*.%%a) do (
  10.         set /a c+=1
  11.         if !c! geq 3 (set check=1&goto break)
  12.     )
  13.     echo;%%a=!c!
  14. )
  15. :break
  16. if defined check (
  17.     for /r %%i in (*) do if %%~zi gtr !n! ( set "n=%%~zi" & set "maxfile=%%~i" )
  18.     del "!maxfile!"
  19.     del /s /q *.cue
  20. )
  21. exit
复制代码

作者: duoduo200    时间: 2022-4-25 16:55

回复 14# zaqmlp


    感谢大佬!
   支付宝上给您发了一杯咖啡钱,辛苦了哈:victory:
作者: zaqmlp    时间: 2022-4-25 16:56

回复 15# duoduo200


    扫头像就行
作者: duoduo200    时间: 2022-4-25 17:12

回复 16# zaqmlp


    已发了哈,请查收。




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