中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 一个我认为很难的问题求助(更新)
« [1] [2] »
作者:
标题: 一个我认为很难的问题求助(更新) 上一主题 | 下一主题
fzp1978321
初级用户





积分 110
发帖 50
注册 2008-1-18
状态 离线
『楼 主』:  一个我认为很难的问题求助(更新)

在JHSJ目录内,有如下格式的文件:YHZJLS_20080102.TXT
                                                      YHZDBP_20080102.TXT
                                                      VIP11.TMP
                                                      5_1000.102
                                                      2_1000.102
                                                      2_1000.C28
                                                      3_1000.C05
                                                      4_1000.B06
                                                      ...........

同时,在JHSJ目录内,有名称为1002,1004,1005...的子目录,而又在这些子目录内.又分别有RECV和SEND两个子目录.
在RECV目录中的文件格式如下:2_1000.102
                                         2_1000.727
                                         2_1000.A26
                                         2_1000.B01
                                         ACCRO0809
                                         JGZJMX0809
                                         KXXX0728.TXT
                                         OBINFO0819
                                         ...............
在SEND目录里,都是YHZJLS_20080102.TXT这样的TXT文件.

要达到的要求:
1.每日生成为一个以当日日期的文件夹,如今天是2008年1月14日,则需 要生成一个20080114的文件夹.
2.在当日生成的文件夹内,按照JHSJ原有的目录样式分别将当日生成的数据 进行拷贝.
 如,在20080114目录下,拷贝当日生成的文件,并且建立1002  文件夹,在1002文件夹内建立RECV和SEND两个子文件夹, 并分 别将这两个文件夹内当日的数据拷贝在各自文件夹内.
3.在下一周,即2008年1月21日拷贝当日数据时,将上一周JHSJ内的 数据清除,前提是保持JHSJ目录结构不变,只删文件,而不删文件夹.
4.此批处理要做成WIN2000下的计划任务定时执行,所以就必须写死.J HSJ文件夹结构是固定的,不会变化.

这个问题我想了快半个月了,基本把自己给绕死了,呵呵,所以就在这向大家求助了.由于对DOS批处理不熟悉,所以也请各位海涵,尽量说得浅显点吧!

另:感谢版主LXMXN和ZJHJ的指点,给了我些帮助,但是在下实在很   菜,至今还未完全理解.尤其是ZJHJ提供的代码.不过很谢谢你们的热  心!

比较晕,无法将JHSJ的压缩文件发上来.

那先贴我自己写的一段吧:

@echo off
::当前日期,格式:yyyymmdd
set today=%date:~0,4%-%date:~5,2%-%date:~8,2%
echo %today%

set src="D:\jhsj"
dir %src%\/o/b/-p>filename.txt
dir %src%\/ad/-p/b/o>dir.txt
  
for /f "delims=\n" %%j in (filename.txt) do (
for /f "tokens=1" %%a in ('dir /tc %%j^|findstr "^....-..-..\>"') do (
  if "%%a"=="%today%" (copy %%j c:\temp\)
)

)
pause


::写到这,我就完全卡住了,而且好象还没写对。哎,恼火!

望高手相助!

[ Last edited by fzp1978321 on 2008-1-20 at 01:33 AM ]

2008-1-18 20:09
查看资料  发送邮件  发短消息 网志  OICQ (195690504)  编辑帖子  回复  引用回复
fzp1978321
初级用户





积分 110
发帖 50
注册 2008-1-18
状态 离线
『第 2 楼』:  

YHZJLS_20080102.TXT
                                                      YHZDBP_20080102.TXT
                                                      VIP11.TMP
                                                      5_1000.102
                                                      2_1000.102

关键是像这样的同一天生成的文件该如何拷贝出来?尤其是VIP11.TMP这样的TMP文件,只能看得到属性里的生成时间,而文件本身反映不出时间.
这是卡住我的第一个难题.

另:我的系统是WIN2000的.

[ Last edited by fzp1978321 on 2008-1-18 at 08:17 PM ]

2008-1-18 20:14
查看资料  发送邮件  发短消息 网志  OICQ (195690504)  编辑帖子  回复  引用回复
fennng
初级用户





积分 23
发帖 11
注册 2008-1-12
状态 离线
『第 3 楼』:  

题目比较难看明白...

2008-1-18 20:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fzp1978321
初级用户





积分 110
发帖 50
注册 2008-1-18
状态 离线
『第 4 楼』:  

那我就把问题拆开问吧,这样可能会简单点
首先,对于当日生成的不同类型文件,应该如何拷贝?
      
      见例:
                                                     YHZJLS_20080102.TXT
                                                      YHZDBP_20080102.TXT
                                                      VIP11.TMP
                                                      5_1000.102
                                                      2_1000.102
(这几个文件都是2008-1-2日生成的文件,只拷贝当日生成的文件,前一日或者更早的文件不拷贝))

[ Last edited by fzp1978321 on 2008-1-18 at 09:17 PM ]

2008-1-18 21:15
查看资料  发送邮件  发短消息 网志  OICQ (195690504)  编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 5 楼』:  

可以用dir命令的“/tc”参数来取得文件的创建时间,再根据时间来进行相应的备份和删除操作即可。

2008-1-18 21:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fzp1978321
初级用户





积分 110
发帖 50
注册 2008-1-18
状态 离线
『第 6 楼』:  

能说下这命令是怎么写的么?我原来也是这么想的,但是就是不知道该怎么去从生成时间来获取文件.
强盼!~

2008-1-18 22:04
查看资料  发送邮件  发短消息 网志  OICQ (195690504)  编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 7 楼』:  

举个简单的例子。

例如获取“C:\windows\explorer.exe”文件的创建时间,并且判断它是不是2007-12-25号创建的,如果是,显示“YES”,否则显示“NO”。
@echo off
for /f "tokens=1" %%a in ('dir /tc C:\Windows\Explorer.exe^|findstr "^....-..-..\>"') do (if "%%a"=="2007-12-25" (echo YES) else echo NO)
pause


2008-1-18 22:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fzp1978321
初级用户





积分 110
发帖 50
注册 2008-1-18
状态 离线
『第 8 楼』:  

好象不对啊,我用你给的这命令,稍微改了下路径,去遍历某个文件夹里的文件,但是全部显示是"NO",可里边有的文件是有2007-12-25那天创建的啊.

[ Last edited by fzp1978321 on 2008-1-19 at 12:43 AM ]

2008-1-19 00:42
查看资料  发送邮件  发短消息 网志  OICQ (195690504)  编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 9 楼』:  

rar可以完成这个工作

2008-1-19 01:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 10 楼』:  

发个自定义搜索给你,这是我写在系统维护V1.8里的一个功能,你自己修改吧。已经把路径都搜出来了,至于备份和删除,我想也不会难的。


@echo off
@cls
@echo.
@echo        自定义搜索各分区的任意文件,默认所有时间,所有扩展,按创建时间记录。
@echo.
@echo    如果在这些日期没有安装软件,则不会有 exe、dll、inf 文件创建在机器中,
@echo.
@echo    检查创建日期,可以发现近期哪些文件是新注入的,是否病毒所为。
@echo.
@echo.
@echo               全盘搜索指定日期(格式:2007-09-29)创建生成的文件
@echo.
set /p sczf=   输入(T 退出)搜索指定生成日期(默认所有日期):
IF "%sczf%" == "T" GOTO  KK
@echo.
@set /p YGJ=   输入要搜索的文件名或扩展名(默认所有扩展: *.*):
@echo  按创建时间(排序)生成的%YGJ%文件(如果需要请另存): >%sczf%生成文件.txt
@echo.>>%sczf%生成文件.txt
::检查有效盘符
cd.>yxpf.txt
cd.>pf.txt
for %%f in (C D E F G H I J K L M N O P Q R) do if exist %%f:\ @echo %%f>>pf.txt
for /f "tokens=*" %%i in (pf.txt) do set /p "mn=%%i "<nul>>yxpf.txt
for /f "delims=" %%i in (yxpf.txt) do set pf=%%i
del pf.txt
del yxpf.txt

@echo 测试系统环境>sw.wer
dir *.wer /a-d /t:w /s>vv.txt
  findstr  /i  "wer"  vv.txt>sw.txt
   type sw.txt | findstr  /i  /r  "上午"  
    if %errorlevel%==0 goto JYSW
     del sw.wer
     del vv.txt
     del sw.txt
     ::不存在“上午”
    set xgbl=%%k %%l
   set zjdx=3
  set zjjc=3
set fdms=%%i%%j%%k%%l
cls
goto JKSJC

:JYSW
del sw.wer
del vv.txt
  del sw.txt
   ::存在“上午”
   set xgbl=%%l
   set zjdx=3
  set zjjc=4
set fdms=%%i%%j%%k%%l
cls

:JKSJC
setlocal enabledelayedexpansion
@echo.
@echo    正在按创建时间+完整路径搜索*%YGJ%文件,请稍候...!
@echo.
@echo   如果需要,请另存>path.txt
for %%f in (%pf%) do (
for /f "tokens=1-%zjdx%*" %%i in (
'dir %%f:\*"%YGJ%"*.*  /a-d /t:c /s ^|findstr ":"'
  ) do (
set syqf=%fdms%
    if "!syqf:~1,1!"==":" set sjl=!syqf!
    if not "!sjl!"=="!syqf!" if not "%%j"=="" echo %%i %%j !sjl:~0,-3!\%xgbl%>>path.txt
  )
)
call  path.txt
::时间排序
sort<path.txt>px.txt
findstr  /R  "\<%sczf%\>" px.txt>> %sczf%生成文件.txt
del path.txt
del px.txt
call  %sczf%生成文件.txt
del 生成文件.txt
del %sczf%生成文件.txt

2008-1-19 20:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fzp1978321
初级用户





积分 110
发帖 50
注册 2008-1-18
状态 离线
『第 11 楼』:  

谢谢楼上的兄弟!

2008-1-20 01:32
查看资料  发送邮件  发短消息 网志  OICQ (195690504)  编辑帖子  回复  引用回复
fzp1978321
初级用户





积分 110
发帖 50
注册 2008-1-18
状态 离线
『第 12 楼』:  

哎,急死了,后半夜了,脑袋都写成糨糊了.

2008-1-20 02:33
查看资料  发送邮件  发短消息 网志  OICQ (195690504)  编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 13 楼』:  

在你的winrar安装目录下有个命令rar.exe你可以拷贝到C:\windows\system32下
然后执行这样的命令行
rar a -agYYYYMMDD -tn1D D:\bak\ D:\jhsj
会在D:\bak下生成一个以当前日期为名的压缩文件,里边包括了D:\jhsj目录下不超过24小内的工作文件

2008-1-20 03:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fzp1978321
初级用户





积分 110
发帖 50
注册 2008-1-18
状态 离线
『第 14 楼』:  

谢谢楼上的解答.
但是这样也没有解决问题啊.比如一周后JHSJ内数据的删除又该如何解决呢?

2008-1-20 13:56
查看资料  发送邮件  发短消息 网志  OICQ (195690504)  编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 15 楼』:  

判断date是否为周一再执行
del /s /q /f D:\jhsj就可以了

2008-1-20 16:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: