标题: [已解决]批处理怎样传送数据给FTP服务器以保证数据安全? [打印本页]
作者: jackjh 时间: 2009-12-16 21:09 标题: [已解决]批处理怎样传送数据给FTP服务器以保证数据安全?
各位高手:
您好!本人需要编一个数据传送上FTP服务器的脚本文件,因本人是刚学批处理不久,还不能独立编写,求各位高手多多指教!先行谢谢!
本人电脑有一个软件会生成STD类型的文件,需要上传到指定的FTP服务器上面以作保存分析用。所用的系统有WIN 95/NT/XP。(如有可能,可以编写一个可以在UNIX 系统下运行的脚本)
BAT程序要求如下:(目的是把同一个文件夹里面所有生成的STD文件完整地上传到FTP服务器)(比如:我的STD文件保存在C:\AB中,LOG文件也最好能把它放进C盘.)
1. 检测本电脑IP(如192.168.1.5)地址,若发现有改变现象,则保存到LOG日志文件中。
2. 检测网络(如可PING10.94.1.7 )是否通畅,如有故障,请提示网络有问题。
3. 检测数据,如找到完整的STD数据,则上传到FTP(197.198.134.105)中保存分析。上传完后要直接删除STD数据文件.不能删掉别的正在生成的STD文件.因为有很多别的STD文件在时刻生成.
4. STD 数据生成过程较慢,有时一个小时或更久,因此在选择传送时,不能把生成一半的STD文件传上去,这样会影响STD文件的继续生成,如何能实现这样数据不被破坏而又能完整生成完整传送STD的功能。数据必须每天24小时传送。保证数据安全不会丢失.
因为这种STD文件一旦开始生成,只生成一半左右,就被上传(因为好像生成一半时也可以被上传),这样会造成上传的数据不完整,而且刚被上传的STD数据不会再重新生成,因此,一定要等到生成完毕后才能传送为最佳。分析判断数据时,我经常是这样判断数据,根据文件的大小,一开始生成时,会比较小,几个KB左右,完成时有几个M左右。因此通过比较文件的大小并且加上时间的限制才行,比较一段时间(一个小时左右),如果没有发现大小的改变,则认为是完成生成STD文件了的。(如您有更好的检测完整的数据分析更好).
5.关于每次生成的STD文件的命名名称(如test123.STD)都完全不一样.所以每次上传时都不会覆盖前一次上传的STD.
如C:\AB\下面有很多STD文件,而且命名都不一样。(批处理可以用通配符识别 *.STD或可以想出更好的办法识别?)。
如果STD 完全生成完毕,全都都要上传。是的,每个STD文件都需单独判断是否生成完毕然后单独或一起上传。STD文件只要生成完毕,就全部上传.
谢谢你的理解和支持!
[ 本帖最后由 jackjh 于 2009-12-23 00:01 编辑 ]
作者: Batcher 时间: 2009-12-16 22:38
“上传完后要直接删除STD数据文件,而不破坏文件生成”,这句话改怎么理解?
“不能把生成一半的STD文件传上去”,你通常如何判断STD数据生成完毕?
作者: jackjh 时间: 2009-12-16 23:23
“上传完后要直接删除STD数据文件,而不破坏文件生成”,这句话改怎么理解?
因为这种STD文件一旦开始生成,只生成一半左右,就被上传(因为好像生成一半时也可以被上传),这样会造成上传的数据不完整,而且不会再重新生成STD,因此,一定要等到生成完毕后才能传送为最佳的。
“不能把生成一半的STD文件传上去”,你通常如何判断STD数据生成完毕?是的,不能传送一半的数据,我经常是这样判断数据的,根据文件的大小,一开始生成时,会比较小,几个KB左右,完成时有几个M左右。我觉得通过比较文件的大小并且加上时间的限制才行,比较一段时间(一个小时吧),如果没有发现大小的改变,则认为是完成生成STD文件了的。谢谢你的理解和支持!
作者: Batcher 时间: 2009-12-17 00:18
每次生成的STD数据文件文件名称都一样?那岂不是后面一次上传会覆盖前面一次上传?
作者: jackjh 时间: 2009-12-17 22:31
对了,我忘了提醒了,每次生成的STD文件的命名都完全不一样的.所以每次上传时都不会覆盖前一次上传的STD.
作者: Batcher 时间: 2009-12-18 00:09 标题: 回复 5楼 的帖子
每次生成的STD文件的命名都完全不一样的,那批处理怎么知道每次STD叫什么名字?
C:\AB\下面只有一个STD文件?
作者: jackjh 时间: 2009-12-18 12:17
每次生成的STD文件的命名都完全不一样的,那批处理怎么知道每次STD叫什么名字? C:\AB\下面只有一个STD文件?
C:\AB\下面有很多STD文件,而且命名都不一样。批处理可以用通配符识别。怎么编不清楚呢?
作者: Batcher 时间: 2009-12-18 12:29 标题: 回复 7楼 的帖子
有很多STD文件,而且命名都不一样,那到底要上传哪个呢?
每个STD文件都需单独判断是否生成完毕然后单独上传?
作者: jackjh 时间: 2009-12-18 15:09
有很多STD文件,而且命名都不一样,
如果STD 完全生成完毕,都要上传。是的,每个STD文件都需单独判断是否生成完毕然后单独或一起上传。
作者: Batcher 时间: 2009-12-18 18:10
好的,我基本上知道该怎么写代码了。
你能否把3、5、7、9楼的问题描述全部更新到顶楼?以便他人查看。
作者: jackjh 时间: 2009-12-19 18:06 标题: 回复 10楼 的帖子
管理员,你好!
现在代码怎么样了呢?能否发出来一下?
作者: jackjh 时间: 2009-12-21 22:14 标题: 回复 10楼 的帖子
batcher 大哥,
能不能帮忙写出这段代码呢,我一直在等着,期望你的好消息.
作者: Batcher 时间: 2009-12-22 21:37
StdCheck.bat- @echo off
- set StdFolder=C:\AB
- set LogFile=%StdFolder%\Std.log
- set LocalIP=192.168.1.5
- set RemoteIP=10.94.1.7
-
- :Init
- rem 检查本电脑IP地址是否有改变
- for /f "tokens=2 delims=:" %%a in ('ipconfig^|findstr "IP.*Address"') do (
- set LocalIP=%%a
- )
- set LocalIP=%LocalIP: =%
- if "" neq "" (
- >>"%LogFile%" echo [%date% %time%]本电脑IP地址变为:%LocalIP%
- )
-
- rem 检查网络是否畅通
- ping -n 1 -l 1 %RemoteIP% >nul 2>&1 || >>"%LogFile%" echo [%date% %time%]网络有问题 && goto :Init
-
- rem 检查STD数据文件是否生成完毕
- setlocal enabledelayedexpansion
- for %%a in ("%StdFolder%\*.std") do (
- set StdSizeNow_%%~na=0
- set StdSizeLast_%%~na=0
- )
- :CheckStd
- for %%a in ("%StdFolder%\*.std") do (
- set StdSizeNow_%%~na=%%~za
- if "!StdSizeNow_%%~na!" neq "0" (
- if "!StdSizeLast_%%~na!" neq "0" (
- if "!StdSizeNow_%%~na!" equ "!StdSizeLast_%%~na!" (
- rem 假设系统日期格式是:yyyy-mm-dd weekday
- rem 根据当前的系统日期时间对待上传的STD数据文件进行归档
- set StdAchive=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.std.bak
- ren "%%a" "%StdAchive%"
- start StdUpload.bat "%StdFolder%" "%StdAchive%"
- ping -n 3600 127.1 >nul 2>&1
- goto :Init
- )
- ) else (
- set StdSizeLast_%%~na=!StdSizeNow_%%~na!
- )
- )
- )
- endlocal
- ping -n 3600 127.1 >nul 2>&1
- goto :CheckStd
复制代码
StdUpload.bat- @echo off
- rem 上传STD数据到FTP
- set ftpUser=USERNAME
- set ftpPass=PASSWORD
- set ftpIP=197.198.134.105
- rem 假设系统日期格式是:yyyy-mm-dd weekday
- set ftpFile=%~1\FTP%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.txt
- >"%ftpFile%" echo,%ftpUser%
- >>"%ftpFile%" echo,%ftpPass%
- >>"%ftpFile%" echo bin
- >>"%ftpFile%" echo put "%~1\%~2"
- >>"%ftpFile%" echo bye
- start ftp -v -i -s:"%ftpFile%" %ftpIP%
复制代码
作者: jackjh 时间: 2009-12-22 23:59
batcher 大哥,
谢谢您! 我从你的文章上尝到了很多有用的东西,真的好佩服你啊,以后更要向你多多学习!多多交流!这么好的论坛,我是来对了, 我以后要认真对待,刻苦学习P技术啊.我建议以后一个QQ群专门交流批处理技术问题.
作者: Batcher 时间: 2009-12-23 13:00 标题: 回复 14楼 的帖子
论坛有QQ群:
http://bbs.bathome.net/announcement.php?id=3#3
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |