批处理遍历文件夹(文件夹名为日期),拷贝符合条件的文件夹及其文件

knifewei 2010-04-14 11:14:41
详细说明一下:我有一个文件夹pic,pic下有许多以日期命名的子文件夹例如:2009-12-01,2009-12-02......2010-01-01,2010-02-02...
子文件下放的是图片文件。
想让主bat文件可以遍历文件夹pic,找到在某段时间内的子文件夹(例如2009-12-12到2010-01-01),把找到的文件夹及其图片文件复制到另一个文件夹下pic_bak,并删除pic中复制的文件夹及图片文件,主bat文件应该有①遍历文件的路径 ②文件拷贝目的路径 ③条件开始日期 ④条件结束日期四个变量;
再有一个bat文件可以用户输入修改主bat文件中的四个变量,呵呵,
感觉比较难,希望大家帮忙试试,分不够可以加,呵呵


...全文
5453 54 打赏 收藏 转发到动态 举报
写回复
用AI写文章
54 条回复
切换为时间正序
请发表友善的回复…
发表回复
AwillAway 2011-09-03
  • 打赏
  • 举报
回复
mark正在学习
AwillAway 2011-09-03
  • 打赏
  • 举报
回复
mark正在学习
RockyBoy 2011-01-20
  • 打赏
  • 举报
回复
just4 该有多郁闷阿..多郁闷阿。
llddyyzz 2010-07-31
  • 打赏
  • 举报
回复
学习一下
knifewei 2010-04-19
  • 打赏
  • 举报
回复
终于成功了,呵呵,谢谢大家,尤其是007,厉害啊,呵呵
现在就结贴。
knifewei 2010-04-17
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 ljc007 的回复:]
引用 43 楼 knifewei 的回复:
批处理取几个月前的第一天的没有人回答,我就放弃了,007要是能给做,我可以在开贴,呵呵,
给个答案吧,呵呵


test.bat


BatchFile code
@echo off
rem 以计算7月之前的第一天的日期为例
set MonthNum=7
>"%temp%\DstDate.vbs" echo strLastDate……
[/Quote]


感谢啊,呵呵,高手就是高手啊,
ljc007 2010-04-17
  • 打赏
  • 举报
回复
test.bat

[code=BatchFile]@echo off
set "dateBegin=2009-12-01"
set "dateEnd=2009-12-04"
set "pathSrc=D:\pic"
set "pathDst=D:\pic_bak"
for /f "delims=" %%a in ('dir /ad /b "%pathSrc%"') do (
if "%%a" geq "%dateBegin%" (
if "%%a" leq "%dateEnd%" (
xcopy /e /q /i "%pathSrc%\%%a" %pathDst%\%%a && rd /s /q "%pathSrc%\%%a"
)
)
)
[/code]
ksig188 2010-04-17
  • 打赏
  • 举报
回复
同样期待解决学习,帮忙顶上去……
就是just4 2010-04-16
  • 打赏
  • 举报
回复
:0 这个倒忘了,反正最多两位数,直接:

[code=BatchFile]set /a aaa=%yy%*365+1%mm%%100*31+1%dd%%100[/code]
knifewei 2010-04-16
  • 打赏
  • 举报
回复
还找到一个问题,
set /a ymd=!yy!*365+!mm!*31+!dd!

当月份或者天数是08或者09 时,系统不认识数值是几进制,
例如:
set /a aaa=2010*365+12*31+07 正常

set /a aaa=2010*365+12*31+08 提示:无效数字,数字常数只能是十进制(17),十六进制(0x11)或八进制(o21)

set /a aaa=2010*365+08*31+01 提示:无效数字,数字常数只能是十进制(17),十六进制(0x11)或八进制(o21)




啊啊哈哈 2010-04-16
  • 打赏
  • 举报
回复
路过学习下!
knifewei 2010-04-16
  • 打赏
  • 举报
回复
我试了,对应转换的数值是正确的,但是执行还是全部移动
就是just4 2010-04-16
  • 打赏
  • 举报
回复
前面加一个echo if !ymd! geq %ymd1% if !ymd! leq %ymd2%查看对应转换的数值是不是正确的就知道了
knifewei 2010-04-16
  • 打赏
  • 举报
回复
好的,我调试一下,还有一个问题:if !ymd! geq %ymd1% if !ymd! leq %ymd2%
这个判断语句没有实质性的作用,每次运行都是文件夹下的所有都进行了移动,
没有按日期条件进行移动,
newaifi 2010-04-16
  • 打赏
  • 举报
回复
方法有很多,LZ可以参考下DOS联盟的帖子.
就是just4 2010-04-16
  • 打赏
  • 举报
回复
多遍历了系统盘c盘根目录文件

直接指定绝对路径啥,比如:
for /f "tokens=1,2* delims==" %%i in (x:\test\config.ini) do (

这个也可以把%%i换成%i先在命令行里调试的
knifewei 2010-04-16
  • 打赏
  • 举报
回复

贴图


knifewei 2010-04-16
  • 打赏
  • 举报
回复
我加上了,我调试的这个好使了:

for /f "tokens=* delims=" %%i in ('dir e:\bianli\test\*.* /ad /b') do (

echo if 1 geq 2 (echo 当前文件夹: %%i)&&(xcopy e:bianli\test\%%i e:bianli\test2\%%i /e /q /i )&&( rd e:bianli\test\%%i /s /q)
)
pause

可是下面这个遍历的文件夹不对,比我要遍历的目标文件夹多,看了一下,多遍历了系统盘c盘根目录文件

@echo off
echo 批量复制文件
echo.
echo 读取批量复制配置
echo.
for /f "tokens=1,2* delims==" %%i in (config.ini) do (
if /i "%%i"=="date1" set date1=%%j
if /i "%%i"=="date2" set date2=%%j
if /i "%%i"=="path1" set path1=%%j
if /i "%%i"=="path2" set path2=%%j
)


echo 开始日期:%date1% --^> 结束日期:%date2%
echo 源路径:%path1% --^> 目标路径:%path2%
echo.
set yy1=%date1:~0,4%
set mm1=%date1:~5,2%
set dd1=%date1:~8,2%
set yy2=%date2:~0,4%
set mm2=%date2:~5,2%
set dd2=%date2:~8,2%
set /a ymd1=%yy1%*365+%mm1%*31+%dd1%
set /a ymd2=%yy2%*365+%mm2%*31+%dd2%

echo 开始复制文件,并不对文件夹名有效作检查
echo.
setlocal enabledelayedexpansion

for /f "tokens=* delims=" %%i in ('dir %path1%\*.* /ad /b') do (
set yy=!filename:~0,4!
set mm=!filename:~5,2!
set dd=!filename:~8,2!
set /a ymd=!yy!*365+!mm!*31+!dd!

echo if 1 geq 2 (echo 当前文件夹: \%%i)&&(xcopy %path1%\%%i %path2%\%%i /e /q /i)&&( rd %path1%\%%i /s /q)
)


pause



ljc007 2010-04-16
  • 打赏
  • 举报
回复
纯粹的BAT也可以实现,不过代码会比较长。
ljc007 2010-04-16
  • 打赏
  • 举报
回复
[Quote=引用 43 楼 knifewei 的回复:]
批处理取几个月前的第一天的没有人回答,我就放弃了,007要是能给做,我可以在开贴,呵呵,
给个答案吧,呵呵
[/Quote]

test.bat

[code=BatchFile]@echo off
rem 以计算7月之前的第一天的日期为例
set MonthNum=7
>"%temp%\DstDate.vbs" echo strLastDate=DateAdd("m", -%MonthNum%, Date)
>>"%temp%\DstDate.vbs" echo strFmtDate=Right(Year(strLastDate),4) ^& Right("0" ^& Month(strLastDate),2) ^& "01"
>>"%temp%\DstDate.vbs" echo WScript.Echo strFmtDate
for /f %%a in ('cscript /nologo "%temp%\DstDate.vbs"') do (
set "LastFirtDay=%%a"
)
set LastFirtDay=%LastFirtDay:~0,4%-%LastFirtDay:~4,2%-%LastFirtDay:~6,2%
echo,%LastFirtDay%
[/code]
加载更多回复(31)

6,849

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧