|
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 |
|
|
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 |
|
|
fennng
初级用户
积分 23
发帖 11
注册 2008-1-12
状态 离线
|
|
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 |
|
|
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 |
|
|
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 |
|
|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
|
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
状态 离线
|
|
2008-1-20 01:32 |
|
|
fzp1978321
初级用户
积分 110
发帖 50
注册 2008-1-18
状态 离线
|
『第
12 楼』:
哎,急死了,后半夜了,脑袋都写成糨糊了.
|
|
2008-1-20 02:33 |
|
|
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 |
|
|
everest79
金牌会员
一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第
15 楼』:
判断date是否为周一再执行
del /s /q /f D:\jhsj就可以了
|
|
2008-1-20 16:38 |
|