![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-26 21:48 |
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,276 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 一个我认为很难的问题求助(更新) |
| 可打印版本 2,074 / 26 |
| 第1楼 fzp1978321 | 发表于 2008-01-18 20:09 |
| 初级用户 发帖 50 积分 110 | |
|
一个我认为很难的问题求助(更新) 在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 ] |
|
| 第2楼 fzp1978321 | 发表于 2008-01-18 20:14 |
| 初级用户 发帖 50 积分 110 | |
|
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 ] |
|
| 第3楼 fennng | 发表于 2008-01-18 20:41 |
| 初级用户 发帖 11 积分 23 | |
|
题目比较难看明白...
|
|
| 第4楼 fzp1978321 | 发表于 2008-01-18 21:15 |
| 初级用户 发帖 50 积分 110 | |
|
那我就把问题拆开问吧,这样可能会简单点
首先,对于当日生成的不同类型文件,应该如何拷贝? 见例: 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 ] |
|
| 第5楼 lxmxn | 发表于 2008-01-18 21:57 |
| 版主 发帖 4,938 积分 11,386 | |
|
可以用dir命令的“/tc”参数来取得文件的创建时间,再根据时间来进行相应的备份和删除操作即可。
|
|
| 第6楼 fzp1978321 | 发表于 2008-01-18 22:04 |
| 初级用户 发帖 50 积分 110 | |
|
能说下这命令是怎么写的么?我原来也是这么想的,但是就是不知道该怎么去从生成时间来获取文件.
强盼!~ |
|
| 第7楼 lxmxn | 发表于 2008-01-18 22:14 |
| 版主 发帖 4,938 积分 11,386 | |
|
举个简单的例子。
例如获取“C:\windows\explorer.exe”文件的创建时间,并且判断它是不是2007-12-25号创建的,如果是,显示“YES”,否则显示“NO”。 |
|
| 第8楼 fzp1978321 | 发表于 2008-01-19 00:42 |
| 初级用户 发帖 50 积分 110 | |
|
好象不对啊,我用你给的这命令,稍微改了下路径,去遍历某个文件夹里的文件,但是全部显示是"NO",可里边有的文件是有2007-12-25那天创建的啊.
[ Last edited by fzp1978321 on 2008-1-19 at 12:43 AM ] |
|
| 第9楼 everest79 | 发表于 2008-01-19 01:54 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
rar可以完成这个工作
|
|
| 第10楼 ZJHJ | 发表于 2008-01-19 20:31 |
| 高级用户 发帖 374 积分 609 | |
|
发个自定义搜索给你,这是我写在系统维护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 |
|
| 第11楼 fzp1978321 | 发表于 2008-01-20 01:32 |
| 初级用户 发帖 50 积分 110 | |
|
谢谢楼上的兄弟!
|
|
| 第12楼 fzp1978321 | 发表于 2008-01-20 02:33 |
| 初级用户 发帖 50 积分 110 | |
|
哎,急死了,后半夜了,脑袋都写成糨糊了.
|
|
| 第13楼 everest79 | 发表于 2008-01-20 03:20 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
在你的winrar安装目录下有个命令rar.exe你可以拷贝到C:\windows\system32下
然后执行这样的命令行 rar a -agYYYYMMDD -tn1D D:\bak\ D:\jhsj 会在D:\bak下生成一个以当前日期为名的压缩文件,里边包括了D:\jhsj目录下不超过24小内的工作文件 |
|
| 第14楼 fzp1978321 | 发表于 2008-01-20 13:56 |
| 初级用户 发帖 50 积分 110 | |
|
谢谢楼上的解答.
但是这样也没有解决问题啊.比如一周后JHSJ内数据的删除又该如何解决呢? |
|
| 第15楼 everest79 | 发表于 2008-01-20 16:38 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
判断date是否为周一再执行
del /s /q /f D:\jhsj就可以了 |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |