中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-06 15:35
48,039 主题排行 / 350,124 发帖 / 今日 0 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » [求助]如何根据日期文件名批量copy txt文件到指定目录
可打印版本  1,014 / 9
第1楼 dpingyan 发表于 2007-11-23 20:02
新手上路 发帖 8 积分 18
[求助]如何根据日期文件名批量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 ]
第2楼 dpingyan 发表于 2007-11-23 22:33
新手上路 发帖 8 积分 18
在线等啊,斑竹帮帮忙
第3楼 upsco 发表于 2007-11-23 23:05
初级用户 发帖 32 积分 67
因为在批处理里处理时间比较麻烦,所以我们把时间当成十进数来操作,用list.txt保存该批处理运行时间-1的值,这样仍然能完成我们的要求



[ Last edited by upsco on 2007-11-23 at 11:19 PM ]
第4楼 dpingyan 发表于 2007-11-24 01:06
新手上路 发帖 8 积分 18
谢谢,测试一下
第5楼 dpingyan 发表于 2007-11-24 01:29
新手上路 发帖 8 积分 18
您好,刚才测试了一下
在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批处理完全外行,麻烦您在看一下如何实现
第6楼 upsco 发表于 2007-11-24 10:24
初级用户 发帖 32 积分 67
第7楼 dpingyan 发表于 2007-11-24 11:52
新手上路 发帖 8 积分 18
感谢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文件)
第8楼 dpingyan 发表于 2007-11-24 15:50
新手上路 发帖 8 积分 18
如何得到list.txt中记录的数值传递给变量呢?
第9楼 dpingyan 发表于 2007-11-24 18:04
新手上路 发帖 8 积分 18
根据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呢?
第10楼 dpingyan 发表于 2007-11-24 18:31
新手上路 发帖 8 积分 18
问题解决了,虽然代码比较难看 感谢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
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023