中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何根据日期文件名批量copy txt文件到指定目录
作者:
标题: [求助]如何根据日期文件名批量copy txt文件到指定目录 上一主题 | 下一主题
dpingyan
新手上路





积分 18
发帖 8
注册 2007-11-23
状态 离线
『楼 主』:  [求助]如何根据日期文件名批量copy txt文件到指定目录

想要实现的批处理如下:
f:\gjsj\目录下存在N个以日期为名的文件夹比如20071110 该文件夹下包含n个.txt文件,
所有以日期为名的文件夹下包含的文件同名。
首先从list.txt文本中读取出已近copy过的最大一天的文件夹名,
根据读取出日期+1,然后从f:\gjsj\目录下寻找出对应的文件夹,比如读取出的文件夹名为20071110,
则自动寻找20071111文件夹,将20071111文件夹所有文件copy到e:\etl\etldata\gj目录下,
copy完之后将文件夹记录入list.txt文件。
依次类推
如何实现这个批处理?之前没有接触过,望给出详细代码

[ Last edited by dpingyan on 2007-11-23 at 08:04 PM ]

2007-11-23 20:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dpingyan
新手上路





积分 18
发帖 8
注册 2007-11-23
状态 离线
『第 2 楼』:  

在线等啊,斑竹帮帮忙

2007-11-23 22:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
upsco
初级用户





积分 67
发帖 32
注册 2007-11-19
状态 离线
『第 3 楼』:  

因为在批处理里处理时间比较麻烦,所以我们把时间当成十进数来操作,用list.txt保存该批处理运行时间-1的值,这样仍然能完成我们的要求
set int_date=%date:-=%
set /a int_new_date=int_date-1
pushd "f:\gjsj\"
for /f %%a in (list.txt) do set int_max=%%a
for /d %%i in ("*") do (
if %%i gtr %int_max% (copy %%i e:\etl\etldata\gj\%%i)
)

echo int_new_date>list.txt
popd
[ Last edited by upsco on 2007-11-23 at 11:19 PM ]

2007-11-23 23:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dpingyan
新手上路





积分 18
发帖 8
注册 2007-11-23
状态 离线
『第 4 楼』:  

谢谢,测试一下

2007-11-24 01:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dpingyan
新手上路





积分 18
发帖 8
注册 2007-11-23
状态 离线
『第 5 楼』:  

您好,刚才测试了一下
在e:\gjsj目录下建立一个20071001文件夹,一个list.txt文件,list.txt文件中有一行记录20070930,文件夹下有一个text.txt文件
测试结果和我所描述的不一致,E:\gjsj\list.txt中并没有记录最近一次copy目录的目录名称,而是记录下了"int_new_date"
copy到E:\etl\etldata\gj目录下的是一个20071001文件,无扩展名。
可能是我表达的有问题,在这个测试中我想看到的结果是从list.txt文本中读取记录20070930,然后寻找e:\gjsj目录下是否存在20071001文件夹,copy20071001文件夹下的text.txt文件到E:\etl\etldata\gj\下
我对dos批处理完全外行,麻烦您在看一下如何实现

2007-11-24 01:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
upsco
初级用户





积分 67
发帖 32
注册 2007-11-19
状态 离线
『第 6 楼』:  


set int_date=%date:-=%
set /a int_new_date=int_date-1
pushd "f:\gjsj\"
for /f %%a in (list.txt) do set int_max=%%a
for /d %%i in ("*") do (
if %%i gtr %int_max% (
    if not exist e:\etl\etldata\gj\%%i\ md e:\etl\etldata\gj\%%i\
    copy %%i e:\etl\etldata\gj\%%i\)
)

echo %int_new_date%>list.txt
popd


   此帖被 +1 点积分    点击查看详情   
评分人:【 dpingyan 分数: +1  时间:2007-11-24 19:11


2007-11-24 10:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dpingyan
新手上路





积分 18
发帖 8
注册 2007-11-23
状态 离线
『第 7 楼』:  

感谢upsco的帮助
上面的程序段还是不能满足我的要求,在这里将我的思路贴出来(不会写代码:),看能不能实现。
1: 定义变量 filename         即将需要copy的文件夹目录
      定义变量 existfilename   list.txt 文本中唯一记录值
2: 设置路径为f:\gjsj\
      读取该路径下list.txt文件,取出list.txt文本中唯一记录值,将值付与existfilename   
       判断existfilename,如果existfilename 为月末(比如20070228,20070930等)则将
      filename 付值为下月月初,如果existfilename 为非月末,则filename 为existfilename +1
      检查filename 文件夹是否存在于f:\gjsj\目录,不存在,终止。存在copyf:\gjsj\filename\目录下所有.txt文件到e:\etl\etldata\gj\目录下(只包含.txt文件,不需要copyfilename 目录)
     copy成功后,将filename 写入list.txt文件
    (在这里有一点要说明,并不是要将不存在list.txt文件中的文件夹copy过去,而是要根据list.txt中记录的最近一天已经copy的文件夹寻找下一天的文件夹来copy文件)

2007-11-24 11:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dpingyan
新手上路





积分 18
发帖 8
注册 2007-11-23
状态 离线
『第 8 楼』:  

如何得到list.txt中记录的数值传递给变量呢?

2007-11-24 15:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dpingyan
新手上路





积分 18
发帖 8
注册 2007-11-23
状态 离线
『第 9 楼』:  

根据upsco 的代码我修改了
麻烦大家帮我看看是什么问题
pushd "e:\gjsj\"
for /f %%a in (list.txt) do set int_max=%%a
if int_max equ 20070930 (
set /a int_max=20071001
)
else ( set /a int_max=int_max+1)
for /d %%i in (*) do (
if %%i equ %int_max% (
copy %%i\*.txt e:\etl\etldata\gj
echo %int_max%>list.txt
)
set /a int_max=int_max+1
)
popd

问题是当我测试的时候int_max怎么会等20070931呢?

2007-11-24 18:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dpingyan
新手上路





积分 18
发帖 8
注册 2007-11-23
状态 离线
『第 10 楼』:  

问题解决了,虽然代码比较难看 感谢upsco的帮助
pushd "e:\gjsj\"
for /f %%a in (list.txt) do set int_max=%%a
if  “%int_max%” equ “20070930” (
set /a int_max=“20071001”
)
else ( set /a int_max=int_max+1)
for /d %%i in (*) do (
if %%i equ %int_max% (
copy %%i\*.txt e:\etl\etldata\gj
echo %int_max%>list.txt
)
set /a int_max=int_max+1
)
popd

2007-11-24 18:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: