标题: [文件操作] [已解决]批处理怎样遍历文件夹删除目标文件? [打印本页]
作者: duoduo200 时间: 2022-4-24 08:31 标题: [已解决]批处理怎样遍历文件夹删除目标文件?
本帖最后由 duoduo200 于 2022-4-26 15:24 编辑
各位大佬!
在用everthing搜索时候,我把所有要处理的文件搜索出来了,想在上面直接执行。之前的提取文件夹下的内容都可以穿透执行,不用点开文件所在的文件夹再运行bat,非常方便。
qixiaobin大大帮我写了代码,但无法遍历穿透执行。能否像类似图片中删除键一样可以直接穿透执行。(同样不要指定路径,总是搬来搬去)
请各位大佬帮忙修改,是否能遍历到文件所在的文件夹直接执行以下的代码。
不知道我是否阐述清楚,请见谅。谢谢。
[img][/img]- @echo off
- if not "%~1"=="" if not "%~1"=="REM" goto :handle
- REM 管理员权限
- %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","REM",,"runas",1)(window.close)&exit
- REM 文件夹右键菜单名称,快捷键,图标
- set "menu_name=最大文件删除"
- set "menu_hotkey=Z"
- set "menu_ico="F:\Picture\Data\WIN32.ico""
- REM 没有则添加,有则删除
- reg delete "HKCR\*\shell\%menu_name%" /f 2>nul && (
- echo 删除右键菜单 %menu_name% 成功
- ) || (
- reg add "HKCR\*\shell\%menu_name%" /ve /d "%menu_name%(&%menu_hotkey%)"
- reg add "HKCR\*\shell\%menu_name%" /v "icon" /d "%menu_ico%"
- reg add "HKCR\*\shell\%menu_name%\command" /ve /d "\"%~0\" \"%%1\"" /f
- echo 添加右键菜单 %menu_name% 成功
- )
- pause&exit
- :handle
- if not exist "%~1\" echo ( 文件夹路径无效 & pause&exit )
- setlocal enabledelayedexpansion
- set n=0
- for /f "delims=" %%a in ('dir /s /b /a-d') do if %%~za gtr !n! (set n=%%~za&set filename=%%a)
- del "%filename%"
- del /s /q *.cue
- 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行之间插入:复制代码
将目标文件拖到批处理文件上,看看显示的路径是否是你要的路径。
作者: 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
- @echo off
- if not "%~1"=="" if not "%~1"=="REM" goto :handle
- REM 管理员权限
- %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","REM",,"runas",1)(window.close)&exit
- REM 文件夹右键菜单名称,快捷键,图标
- set "menu_name=最大文件删除"
- set "menu_hotkey=Z"
- set "menu_ico="F:\Picture\Data\WIN32.ico""
- REM 没有则添加,有则删除
- reg delete "HKCR\*\shell\%menu_name%" /f 2>nul && (
- echo 删除右键菜单 %menu_name% 成功
- ) || (
- reg add "HKCR\*\shell\%menu_name%" /ve /d "%menu_name%(&%menu_hotkey%)"
- reg add "HKCR\*\shell\%menu_name%" /v "icon" /d "%menu_ico%"
- reg add "HKCR\*\shell\%menu_name%\command" /ve /d "\"%~0\" \"%%1\"" /f
- echo 添加右键菜单 %menu_name% 成功
- )
- pause&exit
- :handle
- echo %cd%
- if not exist "%~dp1\" echo ( 文件路径无效 & pause&exit )
- setlocal enabledelayedexpansion
- cd /d "%~dp1" & set "n=0"
- for /r %%i in (*) do if %%~zi gtr !n! ( set "n=%%~zi" & set "filename=%%~i" )
- del "%filename%"
- del /s /q *.cue
- 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
- ……
- ……
- pause&exit
- :handle
- if not exist "%~dp1" ( echo;"%~dp1" 路径错误或不存在 &pause&exit )
- cd /d "%~dp1" & set "n=0" & set "check="
- setlocal enabledelayedexpansion
- for %%a in (wav ape flac) do (
- set c=0&for /r %%b in (*.%%a) do (
- set /a c+=1
- if !c! geq 3 (set check=1&goto break)
- )
- echo;%%a=!c!
- )
- :break
- if defined check (
- for /r %%i in (*) do if %%~zi gtr !n! ( set "n=%%~zi" & set "maxfile=%%~i" )
- del "!maxfile!"
- del /s /q *.cue
- )
- 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 |