标题: 排除删除和对比删除 欢迎测试和完善
[打印本页]
作者: a9319751
时间: 2006-12-10 01:24
标题: 排除删除和对比删除 欢迎测试和完善
排除删除
@echo off
::如果有多个路径,或者排除多个文件夹:::
::或者排除多个文件,请手工进行设置:::::
::findstr 后面可以跟多个/c:""参数::::::
::如:/c:"game" /c:"qq" /c:"net" ::::::
::中间使用空格间隔:::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::
:: code by zzlike 2006-12-11 CMD@XP::::
::******配置文件开始*****************::
::::::::指定搜索路径::例 e:\ ::::::::::
set "dd=e:\"
::::::::排除文件夹:::::::::::::::::::::
set "dn=game"
::::::::排除文件:::::::::::::::::::::::
set "fn=排除删除文件夹.bat"
::******配置文件结束*****************::
::::::::删除文件夹:::::::::::::::::::::
for /f "delims=" %%i in ('dir /b /ad "%dd%" ^|findstr /i /v /b /e /c:"%dn%"') do attrib -s -h -r -a /s /d "%%i" && rd /s /q "%%i" && echo 已删除目录"%%~fi"
::::::::删除文件:::::::::::::::::::::::
for /f "delims=" %%i in ('dir /b /a-d "%dd%" ^|findstr /i /v /b /e /c:"%fn%"') do del /a /f /q "%%i" && echo 已删除文件"%%~fnxi"
对比删除
@echo off && setlocal enabledelayedexpansion
::主要用于全盘远程对比更新:::::::::::::
::如果本地测试请自行修改:::::::::::::::
::本地对比更新已通过测试:::::::::::::::
::远程对比更新未测试:::::::::::::::::::
::此代码效率不高,只为演示:::::::::::::
:: code by zzlike 2006-12-11 CMD@XP::::
:::::::::::::::::::::::::::::::::::::::
::******配置文件开始*****************::
::::::::源目录:::::::::::::::::::::::::
set sd=\\192.168.0.14\d\
::::::::目标盘:::::::::::::::::::::::::
set dd=d:\
::******配置文件结束*****************::
::::::::映射网络路径:::::::::::::::::::
net use x: %sd%
::::::::生成文件列表:::::::::::::::::::
echo. > sd.txt
echo. > dd.txt
for /r "x:\" %%i in (*) do echo %%~pnxi >> sd.txt
for /r "%dd%" %%i in (*) do echo %%~pnxi >> dd.txt
::::::::对比文件列表并删除多余文件:::::
for /f "tokens=*" %%i in (dd.txt) do (
find "%%i" sd.txt || del /a /f /q "%dd%%%i"
)
::::::::删除空文件夹:::::::::::::::::::
set num=0
for /f "delims=" %%i in ('dir /ad /b /s "%dd%"') do (
for /f %%j in ('dir /a "%%i"') do set /a num+=1
if !num! lss 8 attrib -s -h -r -a "%%i" && rd /s /q "%%i"
set num=0
)
::::::::更新文件:::::::::::::::::::::::
xcopy /d /e /i /y /c /q /h /r /k "x:\*" "%dd%*"
::::::::清理临时文件并断开网络路径:::::
net use x: /delete /y
del /a /f /q sd.txt
del /a /f /q dd.txt
[
Last edited by a9319751 on 2006-12-13 at 08:23 AM ]
作者: lxmxn
时间: 2006-12-10 01:46
显得好乱……
作者: a9319751
时间: 2006-12-10 01:52
恩,能不能简化下啊,老兄
作者: lxmxn
时间: 2006-12-10 02:05
@echo off&&for /f "delims=" %%i in ('dir /b/a-d ^|FINDSTR /i /v "\<不删除的文件\>"') do attrib -s -h -r -a "%%i" && del /q/f "%%i"
pause
作者: a9319751
时间: 2006-12-10 02:14
Quote: |
Originally posted by lxmxn at 2006-12-10 02:05:
[code]
@echo off&&for /f "delims=" %%i in ('dir /b/a-d ^|FINDSTR /i /v "\<不删除的文件\>"') do attrib -s -h -r -a "%%i" && ... |
|
请教下兄 ^一般什么时间才用啊?
另外你的脚本我测试了,
如果排除文件有空格不能完成删除
作者: a9319751
时间: 2006-12-10 02:51
修改了下
for /f "usebackq delims=" %%i in (`dir/b/ad e: ^|FINDSTR/i /V "\^<game\^>"^|FINDSTR/i /V "\^<QQ对战平台\^>"^|FINDSTR/i /V "\^<ghost\^>"`) do attrib -s -h -r -a /s /d "%%i" && rd /s /q "%%i"
for /f "usebackq delims=" %%i in (`dir/b/a-d e: ^|FINDSTR/i /V "\^<排除删除文件夹.bat\^>"`) do attrib -s -h -r -a "%%i" && del /q "%%i"
pause
<>|前面^别的还有吗?
作者: namejm
时间: 2006-12-10 03:05
删除文件前不必先去文件属性,直接用 del /a /f 强制删除任意属性的文件就可以了。
作者: a9319751
时间: 2006-12-10 03:10
Quote: |
Originally posted by namejm at 2006-12-10 03:05:
删除文件前不必先去文件属性,直接用 del /a /f 强制删除任意属性的文件就可以了。 |
|
for /f "usebackq delims=" %%i in (`dir/b/ad e: ^|FINDSTR/i /V "\^<game\^>"^|FINDSTR/i /V "\^<QQ对战平台\^>"^|FINDSTR/i /V "\^<ghost\^>"`) do attrib -s -h -r -a /s /d "%%i" && rd /s /q "%%i"
for /f "usebackq delims=" %%i in (`dir/b/a-d e: ^|FINDSTR/i /V "\^<排除删除文件夹.bat\^>"`) do del /a /f /q "%%i"
pause
作者: lxmxn
时间: 2006-12-10 08:16
Quote: |
请教下兄 ^一般什么时间才用啊?
另外你的脚本我测试了,
如果排除文件有空格不能完成删除 |
|
对于何时需要使用^符号:
这个"^"符号可以说是批处理的转义字符,可以将一些批处理里面的特殊的字符转换成其字符本身,有点类似c语言里面的转义符"\"。比如要在命令回显&^|等特殊字符时,必须在前面加上^符号,用来将其后的字符转义为本身。在带有/f参数的 for命令里面,括号里面的命令如果用到了管道字符,比如 | > << >> 等字符时,比如在这些符号前面加上转义符号^来转义。
对于不能删除带有空格的文件,可以将空格用.(西文的句号)来代替。我刚做了一个实验,在一个文件夹下建立了如下一些文件:
Quote: |
2006-12-09 19:08 <DIR> .
2006-12-09 19:08 <DIR> ..
2006-12-09 19:08 22 1 # 1.txt
2006-12-09 19:08 22 11 # 11.txt
2006-12-09 19:08 22 13 # 13.txt
2006-12-09 19:08 22 15 # 15.txt
2006-12-09 19:08 22 17 # 17.txt
2006-12-09 19:08 22 19 # 19.txt
2006-12-09 19:08 22 3 # 3.txt
2006-12-09 19:08 22 5 # 5.txt
2006-12-09 19:08 22 7 # 7.txt
2006-12-09 19:08 22 9 # 9.txt |
|
比如我想保留"9 # 9.txt"和"19 # 19.txt",而将其它的文件都删除,那么可以使用下面的代码:
@echo off
for /f "delims=" %%i in ('dir /b/a-d ^|findstr /i /V "\<19.#.19.txt\> \<9.#.9.txt\>"') do del "%%i"
pause
值得注意的是:执行任务的批处理文件最好不要放在当前目录,可能会被删除。另外,findstr后面的两个文件中间有一个空格,如果没有,可能会将目录里面的所有文件删除。
作者: a9319751
时间: 2006-12-11 02:55
不错,谢谢了,比我写的好看多了
for /f "delims=" %%i in ('dir /b/ad e:\ ^|findstr /i /V "\<19.#.19.txt\> \<9.#.9.txt\>"') do attrib -s -h -r -a /s /d "%%i" && rd /s /q "%%i"
for /f "delims=" %%i in ('dir /b/a-d e:\ ^|findstr /i /V "\<新建.文本文档.bat\> \<9.#.9.txt\>"') do del /a /f /q "%%i"
pause
打算些个生成这个文件的P
[
Last edited by a9319751 on 2006-12-11 at 03:31 AM ]
作者: a9319751
时间: 2006-12-12 05:44
to lxmxn
9楼的代码 和10楼的代码都不能完美处理
新建 文本文档.txt
新建1文本文档.txt
新建2文本文档.txt
(1)新建 文本文档.txt
新建 文本文档.txt
新建 文本文档 (2).txt
等等问题
我又重写了代码,顶楼已更新,欢迎指导
顶楼的已可以正确判断这些
[
Last edited by a9319751 on 2006-12-13 at 08:08 AM ]
作者: a9319751
时间: 2006-12-13 07:17
有帮忙测试的没
作者: lxmxn
时间: 2006-12-13 07:56
哪里来的19,20楼?
你不要把以前的内容删除了啊,这样就不要分析了。
等会儿帮你测试。
作者: a9319751
时间: 2006-12-13 08:09
不好意思,是我写错了,是9和10楼,嘿嘿
我不是版主杂会删贴呢
不好意思
[
Last edited by a9319751 on 2006-12-13 at 08:19 AM ]
作者: lrbf810
时间: 2007-1-11 10:01
COPY了,等下研究了再回来请教.
作者: Eblis
时间: 2007-1-11 10:39
能不能解释一下这段话?
set num=0
for /f "delims=" %%i in ('dir /ad /b /s "%dd%"') do (
for /f %%j in ('dir /a "%%i"') do set /a num+=1
if !num! lss 8 attrib -s -h -r -a "%%i" && rd /s /q "%%i"
set num=0
作者: a9319751
时间: 2007-2-1 11:41
Quote: |
Originally posted by Eblis at 2007-1-11 10:39:
能不能解释一下这段话?
set num=0
for /f "delims=" %%i in ('dir /ad /b /s "%dd%"') do (
for /f %%j in ('dir /a "%%i"') do set /a num+=1
if !num! ls ... |
|
删除空文件夹
作者: senffon
时间: 2007-2-1 12:04
哈哈,在这里找到组织了,天下网盟的人原来在这里也有!