中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-27 01:09
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 一个我认为很难的问题求助(更新) 查看 1,673 回复 26
楼 主 一个我认为很难的问题求助(更新) 发表于 2008-01-18 20:09 ·  中国 四川 成都 电信
初级用户
★★
积分 110
发帖 50
注册 2008-01-18 15:02
18年会员
UID 108931
性别 男
状态 离线
在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 发表于 2008-01-18 20:14 ·  中国 四川 成都 电信
初级用户
★★
积分 110
发帖 50
注册 2008-01-18 15:02
18年会员
UID 108931
性别 男
状态 离线
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 发表于 2008-01-18 20:41 ·  新西兰
初级用户
积分 23
发帖 11
注册 2008-01-12 12:51
18年会员
UID 108376
性别 男
状态 离线
题目比较难看明白...
4 发表于 2008-01-18 21:15 ·  中国 四川 成都 电信
初级用户
★★
积分 110
发帖 50
注册 2008-01-18 15:02
18年会员
UID 108931
性别 男
状态 离线
那我就把问题拆开问吧,这样可能会简单点
首先,对于当日生成的不同类型文件,应该如何拷贝?

见例:
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 发表于 2008-01-18 21:57 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
可以用dir命令的“/tc”参数来取得文件的创建时间,再根据时间来进行相应的备份和删除操作即可。
6 发表于 2008-01-18 22:04 ·  中国 四川 成都 电信
初级用户
★★
积分 110
发帖 50
注册 2008-01-18 15:02
18年会员
UID 108931
性别 男
状态 离线
能说下这命令是怎么写的么?我原来也是这么想的,但是就是不知道该怎么去从生成时间来获取文件.
强盼!~
7 发表于 2008-01-18 22:14 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
举个简单的例子。

例如获取“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
8 发表于 2008-01-19 00:42 ·  中国 四川 成都 电信
初级用户
★★
积分 110
发帖 50
注册 2008-01-18 15:02
18年会员
UID 108931
性别 男
状态 离线
好象不对啊,我用你给的这命令,稍微改了下路径,去遍历某个文件夹里的文件,但是全部显示是"NO",可里边有的文件是有2007-12-25那天创建的啊.

[ Last edited by fzp1978321 on 2008-1-19 at 12:43 AM ]
9 发表于 2008-01-19 01:54 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
rar可以完成这个工作
10 发表于 2008-01-19 20:31 ·  中国 四川 泸州 联通
高级用户
★★★
积分 609
发帖 374
注册 2006-08-02 22:38
19年会员
UID 59720
状态 离线
发个自定义搜索给你,这是我写在系统维护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 发表于 2008-01-20 01:32 ·  中国 四川 成都 电信
初级用户
★★
积分 110
发帖 50
注册 2008-01-18 15:02
18年会员
UID 108931
性别 男
状态 离线
谢谢楼上的兄弟!
12 发表于 2008-01-20 02:33 ·  中国 四川 成都 电信
初级用户
★★
积分 110
发帖 50
注册 2008-01-18 15:02
18年会员
UID 108931
性别 男
状态 离线
哎,急死了,后半夜了,脑袋都写成糨糊了.
13 发表于 2008-01-20 03:20 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
在你的winrar安装目录下有个命令rar.exe你可以拷贝到C:\windows\system32下
然后执行这样的命令行
rar a -agYYYYMMDD -tn1D D:\bak\ D:\jhsj
会在D:\bak下生成一个以当前日期为名的压缩文件,里边包括了D:\jhsj目录下不超过24小内的工作文件
14 发表于 2008-01-20 13:56 ·  中国 四川 成都 电信
初级用户
★★
积分 110
发帖 50
注册 2008-01-18 15:02
18年会员
UID 108931
性别 男
状态 离线
谢谢楼上的解答.
但是这样也没有解决问题啊.比如一周后JHSJ内数据的删除又该如何解决呢?
15 发表于 2008-01-20 16:38 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
判断date是否为周一再执行
del /s /q /f D:\jhsj就可以了
论坛跳转: