标题: [文件操作] [已解决]批处理如何全盘搜索批量删除几类文件,但要排除某些目录? [打印本页]
作者: locoman 时间: 2019-2-24 15:24 标题: [已解决]批处理如何全盘搜索批量删除几类文件,但要排除某些目录?
本帖最后由 locoman 于 2019-3-17 00:25 编辑
如何实现:全盘搜索批量删除几类文件,但要排除某些目录。
需求:
1. 想全盘搜索*.XLS、*.DOC、*.JPG文件,并将其删除;
2. 但,在执行删除时,又不能删除某些目录内的该几类文件,比如:c:\windows、d:\办公保存、e:\档案保存,等目录下的*.XLS、*.DOC、*.JPG不能删除。
——谢谢大神们帮助我!!
作者: flashercs 时间: 2019-2-24 17:35
a.bat- @echo off
- powershell -command "$aExcludes=@('c:\windows','d:\办公保存','e:\档案保存');[System.IO.DriveInfo]::GetDrives()|ForEach-Object{Get-ChildItem -LiteralPath $_.Name -Filter *.* -Directory|Where-Object{$_.FullName -notin $aExcludes}|ForEach-Object{Remove-Item -LiteralPath $_ -Filter *.* -Include *.xls,*.doc,*.jpg -Recurse -WhatIf}}"
复制代码
测试是否是想要删除的文件,然后再删。
作者: 滴血雄鹰 时间: 2019-2-28 16:50
回复 2# flashercs
如果批量删除a文件夹及子文件夹下1.bat,代码怎么写?
作者: locoman 时间: 2019-3-6 10:28
回复 2# flashercs
非常感谢您的热情帮助!
因为,主贴的删除需求涉及面很广,且是直接删除了未进入回收站,风险特别大。
所以,我必须向您请教清楚才敢去实测。请见谅!
——
1.您这句是啥意思?——“测试是否是想要删除的文件,然后再删”。
2.您这个代码,能确保需要保护的目录(c:\windows、d:\办公保存、e:\档案保存)不会有删除操作吗?
作者: flashercs 时间: 2019-3-7 16:26
回复 4# locoman
这代码目前不会删除任何文件的,只是会告诉你将来会删除哪些文件!
若认为删除的文件是正确的,要执行真正删除,请删掉代码后面的 “-WhatIf” 后保存并运行。
作者: locoman 时间: 2019-3-8 15:26
回复 5# flashercs
谢谢您不厌其烦的帮助我!!谢谢您!
我水平有限,是因为工作中需要,而且是想以批处理文件形式交给同事们去运行完成需求。
将您的代码保存为“指定删除.bat”,运行报错。
有个帖子也曾简介了一下powershell与BAT混用的事儿,但我搞不来。
我就想请您继续帮助我搞成一键点击执行的一个东东(bat),否则,同事们拿到手也搞不来的。
拜托了!
报错——
C:\Users\Administrator.AFOHQ-712210916\Desktop\指定删除>指定删除.bat
必须在“-”运算符的右侧提供值表达式。
所在位置 行:1 字符: 182
+ $aExcludes=@('c:\windows','d:\办公保存','e:\档案保存');[System.IO.DriveInfo]:
:GetDrives()|ForEach-Object{Get-ChildItem -LiteralPath $_.Name -Filter *.* -Dir
ectory|Where-Object{$_.FullName - <<<< notin $aExcludes}|ForEach-Object{Remove-
Item -LiteralPath $_ -Filter *.* -Include *.xlsx,*.doc,*.jpg,*.bmp -Recurse -W
hatIf}}
+ CategoryInfo : ParserError: ( [], ParentContainsErrorRecordEx
ception
+ FullyQualifiedErrorId : ExpectedValueExpression
作者: flashercs 时间: 2019-3-8 20:40
回复 6# locoman
用bat也许更好,下面纯批处理,请保存为 文件名.bat- @echo off
- setlocal EnableDelayedExpansion
- REM 设置要排除的目录列表,用双引号包括,以空格分割.
- set dirsExclude="c:\windows" "d:\办公保存" "e:\档案保存"
- REM 要删除的文件扩展名列表,用双引号包括,以空格分割.
- set exts="*.xls" "*.doc" "*.jpg"
- echo 全盘搜索中,请稍候...
- for /f "tokens=1*" %%A in ('fsutil fsinfo drives') do (
- for %%D in (%%B) do (
- pushd "%%D"
- for /f "delims=" %%E in ('dir /ad-h-s /b') do (
- set flag=1
- for %%F in (%dirsExclude%) do (
- if /i "%%~fE"==%%F set flag=0
- )
- if !flag!==1 (
- for /f "delims=" %%G in ('where /r "%%~fE" /f %exts% 2^>nul') do (
- REM 若要真正删除文件,请去掉下面这行的 "echo"
- echo del /f /q %%G
- )
- )
- )
- popd
- )
- )
- )
- endlocal
- pause
- exit /b
复制代码
作者: locoman 时间: 2019-3-15 11:13
本帖最后由 locoman 于 2019-3-15 11:16 编辑
回复 7# flashercs
谢谢您的热情热心!!
佩服您的精湛技艺!!
前日,家中有要事耽搁,未能好好测试,不好意思!
我简单测试了一下 七楼的代码,您的这个BAT完全按照我的需要能列出需要的文件出来。
——那么,我现在想继续按您的思路,修改为:将列出的路径及文件名保存到一个TXT文件去,如保存到:d:\DEL_list.txt
19行修改为:
echo %%G >>d:\DEL_list.txt
——能实现保存。但有个缺陷:再次运行BAT时,并没有将上次已经存在的d:\DEL_list.txt的内容清空再写入而造成重复内容了。
——但是,我更想进一步完善,需要您再帮我对此优化下,谢谢!
1.首先,我在19行的修改实现,不一定规范标准、效率不一定高;
2.保存到d:\DEL_list.txt时,应该首先有个判断:d:\DEL_list.txt是否存在,存在的话,须先将其内容清空再写入。
——真不好意思多次麻烦您,但为了把一件事搞得更完美和借此向您把问题学习清楚,只能多多麻烦请教了,谢谢您!!
作者: flashercs 时间: 2019-3-16 10:26
回复 8# locoman - @echo off
- setlocal EnableDelayedExpansion
- REM 设置要排除的目录列表,用双引号包括,以空格分割.
- set dirsExclude="c:\windows" "d:\办公保存" "e:\档案保存"
- REM 要删除的文件扩展名列表,用双引号包括,以空格分割.
- set exts="*.xls" "*.doc" "*.jpg"
- REM 设置保存文件路径
- set outFile="d:\DEL_list.txt"
- echo 全盘搜索中,请稍候...
- (
- for /f "tokens=1*" %%A in ('fsutil fsinfo drives') do (
- for %%D in (%%B) do (
- pushd "%%D"
- for /f "delims=" %%E in ('dir /ad-h-s /b') do (
- set flag=1
- for %%F in (%dirsExclude%) do (
- if /i "%%~fE"==%%F set flag=0
- )
- if !flag!==1 (
- for /f "delims=" %%G in ('where /r "%%~fE" /f %exts% 2^>nul') do (
- echo %%G
- )
- )
- )
- popd
- )
- )
- )
- )>%outFile%
- endlocal
- pause
- exit /b
复制代码
作者: locoman 时间: 2019-3-16 14:47
本帖最后由 locoman 于 2019-3-16 14:59 编辑
回复 9# flashercs
谢谢您一直热情帮助解决!
将9楼的代码保存为BAT运行后,并没有实现将搜索结果保存到TXT文件,因为,搜索完成后D盘没有“DEL_list.txt”文件。
另外,7楼和9楼的代码,在执行搜索完成后,都会在黑窗口中最后显示一句“设备未就绪。”,不明白这是啥意思?
作者: flashercs 时间: 2019-3-16 17:30
- @echo off
- setlocal EnableDelayedExpansion
- REM 设置要排除的目录列表,用双引号包括,以空格分割.
- set dirsExclude="c:\windows" "d:\办公保存" "e:\档案保存"
- REM 要删除的文件扩展名列表,用双引号包括,以空格分割.
- set exts="*.xls" "*.doc" "*.jpg"
- REM 设置保存文件路径
- set outFile="d:\DEL_list.txt"
- echo 全盘搜索中,请稍候...
- (
- for /f "tokens=1*" %%A in ('fsutil fsinfo drives') do (
- for %%D in (%%B) do (
- pushd "%%D"
- for /f "delims=" %%E in ('dir /ad-h-s /b') do (
- set flag=1
- for %%F in (%dirsExclude%) do (
- if /i "%%~fE"==%%F set flag=0
- )
- if !flag!==1 (
- for /f "delims=" %%G in ('where /r "%%~fE" /f %exts% 2^>nul') do (
- echo %%G
- )
- )
- )
- popd
- )
- )
- )>%outFile%
- endlocal
- pause
- exit /b
复制代码
设备未就绪,可能是有移动USB硬盘把
作者: locoman 时间: 2019-3-17 00:22
回复 11# flashercs
已经非常完美了!很高兴!
其实,令我更高兴的是在茫茫网海中能有您这么一位古道热肠的能人义士,实在是我辈小白之幸事!!
非常感谢您了!
——至于在黑窗口中最后还是要显示“设备未就绪”已无伤大雅的了。并无移动USB硬盘,或许是笔记本电脑吧,抽时间在台式电脑上一试。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |