那我想在删除前把这些文件备份,包括目录结构,和里面所有的文件
也就是说
比如 删除D:/music/123/*.rm 就把123文件夹里所有的文件 和 目录结构一起备份
如果能把music文件夹整个备份当然更好
请兄赐教啊
也就是说
比如 删除D:/music/123/*.rm 就把123文件夹里所有的文件 和 目录结构一起备份
如果能把music文件夹整个备份当然更好
请兄赐教啊
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
Originally posted by tide2046 at 2006-9-28 21:41:
那我想在删除前把这些文件备份,包括目录结构,和里面所有的文件
也就是说
比如 删除D:/music/123/*.rm 就把123文件夹里所有的文件 和 目录结构 ...
Originally posted by pengfei at 2006-9-28 07:02:
在14楼代码的基础上修改, 完全抛开了13楼与14楼中的正则表达式用法. 因此速度得到大幅度提升, 另外一个优点是可以匹配非纯数字目录(慎用!). 经过浠...
Originally posted by namejm at 2006-9-28 22:53:
通过截取字符来判断的方法确实不错,比 echo|findstr 效率高多了,赞一个先。
下一步可以考虑路径带空格的问题,呵呵。
@echo off
set strOldDir=%cd%
set strRegExp=".*\\*\\*$"
rem set strRegExp=".*\\*$"
set strFileExtension=*.wmv *.rm *.rmvb *.avi *.mp3 *.wma *.wav
for /f "delims=" %%i in ('dir /ad /s /b ^| findstr /rc:%strRegExp%') do cd "%%i" && echo %%i && dir /b %strFileExtension%
rem for /f "delims=" %%i in ('dir /ad /s /b ^| findstr /rc:%strRegExp%') do cd "%%i" && del %strFileExtension%
cd %strOldDir%
pause
注意事项:
1.此脚本为演示效果,若要删除影音文件,可以把第二个for语句前面的rem移到第一个for语句之前。
2.若要添加备份目录功能,可以直接用xcopy在for语句里面自行添加。
3.默认目录格式若: x:\xxx\数字\数字\影音文件(如要包括子目录可在for语句中的del/dir命令后加上/s参数),如果移动第四行前面的rem到第三行行首,则默认目录格式若: x:\xxx\数字\影音文件
4.以上代码均未测试。
关于回贴中提到的不用findstr的方法的两点想法:
1.关于获得最后两个目录
for ..... do (
set "strDir="%%i""
set "strDir=!strDir:\=" "!"
for %%? in (!strDir!) do strTmp=%%? !strTmp!
call :dosomething !strTmp!
)
....
:dosomething
rem 在这个标号段中只需要对%1和%2做判断就可以了。
rem %1对应最低层子目录,%2为%1的父目录。
goto :eof
2.关于判断目录是否全为数字:
:IsNumber
set "strNum=%~1%~2"
for /l %%i in (0,1,9) do set "strNum=!strNum:%%i=!"
if "%strNum%" == "" echo 全数字!
goto :eof
注意:以上代码均未测试。
Originally posted by 3742668 at 2006-9-29 01:49:
@echo off
set strOldDir=%cd%
set strRegExp=".*\\*\\*$"
rem set strRegExp=".*\\*$"
set strFileExtension=*.wmv *.rm *.rmvb *.avi *.mp3 *.wma *.wav
for /f "delims=" %%i in ('dir /ad /s /b ^| findstr /rc:%strRegExp%') do cd "%%i" && echo %%i && dir /b %strFileExtension%
rem for /f "delims=" %%i in ('dir /ad /s /b ^| findstr /rc:%strRegExp%') do cd "%%i" && del %strFileExtension%
cd %strOldDir%
pause
@echo off
set strOldDir=%cd%
set Filter="%cd:\=\\%\\*\\*$"
rem set Filter=".*\\*\\*$"
rem set Filter=".*\\*$"
set FileExtension=*.wmv *.rm *.rmvb *.avi *.mp3 *.wma *.wav
set "cmd1=dir /ad /s /b ^| findstr /rc:"
set "cmd2=cd "%%i" && echo %%i && dir /b"
for /f "delims=" %%i in ('%cmd1%%Filter%') do %cmd2% %FileExtension%
cd %strOldDir%
pause
for .... do (
set "strPath=%%i"
set "strPath=!strPath:*%cd%\=!"
call :dosomething "!strPath:\="
)
goto :eof
:dosomething
rem 这里除了21F中过滤数字的代码以外
rem 还需要对空格进行过滤
rem 参数要用%~*而不是%~1%~2
goto :eof
Originally posted by tide2046 at 2006-9-28 05:34:
现在上司给的指示是:只能是父目录为数字的文件夹里的影音文件和其子目录名同样为数字的文件夹里的影音文件才可以删
即:比如 D:/music/123/*.rm 这样的不能删
而:D:3213/321/*.rm 这样的需要删除
不好意思, 我这网络真差, 刚连上就掉线了, 一连提交几次才成功, 一看居然提交了两次重复内容. 汗...
Originally posted by 3742668 at 2006-10-1 12:24:
Re pengfei:
1.findstr /rc:".*\\*\\*$"表示搜索字符串的内容为:++++,在findstr的搜索字符中 ...