环思产品论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 1856|回复: 0
打印 上一主题 下一主题

(DOS批处理) 批量FTP上传与下载 (不支持SFTP)

[复制链接]

131

主题

154

帖子

1161

积分

超级版主

机总

Rank: 8Rank: 8

积分
1161
QQ
跳转到指定楼层
楼主
发表于 2015-9-15 16:42:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhouf 于 2015-9-15 20:00 编辑

批量FTP上传与下载 (不支持SFTP)

应用场景:
 环思ERP软件与外部(第三方)系统,双方电子数据交换(EDI);
 比如:上海某客户ERP数据,需与美国客户的ERP做EDI,双方系统生成EDI文件后,通过此FTP工具定时同步;
 我们可以通过 SQL Server 调用 xp_cmdshell 的方式调用来执行FTP数据上传下载;

DOS 批处理语法:
  1. hsftp.exe upload
  2.     -s"SERVER:21" -u"UID" [-p"PWD"]
  3.     -fr"D:\EDI\MTL\MTL*.csv"
  4.     -to"/MTL/TMP/"
  5.     [-frDone"D:\EDI\MTL\DONE\"]
  6.     [-toDone"/MTL/"]
  7.     [-frDoneByMonth"yes"]
  8.     [-log"D:\EDI\LOG\upload_20150909.log"]
  9. hsftp.exe download
  10.     -s"SERVER:21" -u"UID" [-p"PWD"]
  11.     -fr"/BOM/BOM*.csv"
  12.     -to"D:\EDI\BOM\TMP\"
  13.     [-frDone"/BOM/DONE/"]
  14.     [-toDone"D:\EDI\BOM\"]
  15.     [-frDoneByMonth"yes"]
  16.     [-log"D:\EDI\LOG\download_20150909.log"]
复制代码
执行过程:
  • 找到[fr]中满足条件的所有文件名;
  • 上传或下载到[to]目录中;
  • 比较服务器与本地这些文件,找出大小相同的文件名(成功);
  • [frDone]存在时,移动以上成功的文件名[fr]->[frDone],
    [frDoneByMonth]为“yes”时,以上成功的文件移动至[frDone]下的月份目录,
    [frDone]不存在时,从[fr]删除以上成功的文件;
  • [toDone]存在时,移动以上成功的文件名[to]->[toDone],
  • [log]存在时,将以上所有日志保存到此日志文件中;

示例A: 批量上传
  1. @echo off
  2. hsftp.exe upload -s"192.168.1.2:21" -u"ftpUser" -p"ftpPassword" -fr"D:\EDI\Material\MTRL*.csv" -frDone"D:\EDI\Material\Done\" -to"/Material/TMP/" -toDone"/Material/" -frDoneByMonth"yes" -log"D:\EDI\Log\upload_20150915.log"
  3. timeout 10
复制代码
  • 将本地“D:\EDI\Material\”下所有“MTRL*.csv”文件,上传至FTP服务器临时目录“/Material/TMP/”;
    此种处理方式为了防止FTP上传过程,只上传了一半,结果网络断开了,所以先上传到临时目录;
  • 上传完成后,比较文件大小,两者大小一致的文件,视为上传成功:
    FTP服务器:移动文件到正式目录“/Material/”;
    本地电脑:移动文件到历史目录“D:\EDI\Material\Done\201509”(当参数frDoneByMonth=yes时存放到月份目录);
  • 保存上传日志至文件“D:\EDI\Log\upload_20150915.log”;

示例B: 批量上传
  1. @echo off
  2. hsftp.exe upload -s"192.168.1.2:21" -u"ftpUser" -p"ftpPassword" -fr"D:\EDI\Material\MTRL*.csv" -to"/Material/" -log"D:\EDI\Log\upload_20150915.log"
  3. timeout 10
复制代码
  • 将本地“D:\EDI\Material\”下所有“MTRL*.csv”文件,上传至FTP服务器正式目录“/Material/”;
    此种处理方式可能会造成文件上传一半,被对方的信息系统脏读走了;
  • 上传完成后,比较文件大小,两者大小一致的文件,视为上传成功:
    FTP服务器:不操作;
    本地电脑:删除“D:\EDI\Material\”下所有上传成功的“MTRL*.csv”文件;
  • 保存上传日志至文件“D:\EDI\Log\upload_20150915.log”;

示例C: 批量下载
  1. @echo off
  2. hsftp.exe download -s"192.168.1.2:21" -u"ftpUser" -p"ftpPassword" -fr"/Product/PROD*.csv" -frDone"/Product/Done/" -to"D:\EDI\Product\TMP\" -toDone"D:\EDI\Product\" -frDoneByMonth"yes" -log"D:\EDI\Log\download_20150915.log"
  3. timeout 10
复制代码
  • 将FTP服务器“/Product/”目录下所有“PROD*.csv”文件,下载到本地临时目录“D:\EDI\Product\TMP\”;
  • 上传完成后,比较文件大小,两者大小一致的文件,视为上传成功:
    FTP服务器:移动文件到历史目录“/Product/Done/”;
    本地电脑:移动文件到正式目录“D:\EDI\Product\”;
  • 保存上传日志至文件“D:\EDI\Log\download_20150915.log”;

日志文件效果:
----------
2015-09-15 17:45:39.561 : 消息:登陆成功(ftp://ftpUser:****@192.168.1.2:21)
2015-09-15 17:45:39.563 : 消息:目录正常(D:\EDI\Product\TMP\,D:\EDI\Product\)
2015-09-15 17:45:39.577 : 消息:目录正常(/Test/Product/,/Test/Product/Done)
2015-09-15 17:45:39.656 : 消息:下载成功(/Test/Product/PROD_20150909_134801.csv=>D:\EDI\Product\TMP\,大小=9868)
2015-09-15 17:45:39.705 : 消息:下载成功(/Test/Product/PROD_20150909_134802.csv=>D:\EDI\Product\TMP\,大小=9564)
2015-09-15 17:45:39.741 : 消息:移动文件(/Test/Product/PROD_20150909_134801.csv,/Test/Product/Done/201509)
2015-09-15 17:45:39.758 : 消息:移动文件(/Test/Product/PROD_20150909_134802.csv,/Test/Product/Done/201509)
2015-09-15 17:45:39.760 : 消息:移动文件(D:\EDI\Product\TMP\PROD_20150909_134801.csv,D:\EDI\Product\)
2015-09-15 17:45:39.763 : 消息:移动文件(D:\EDI\Product\TMP\PROD_20150909_134802.csv,D:\EDI\Product\)
2015-09-15 17:45:39.764 : 消息:下载完毕,共 2 个文件
----------

hsftp_Application.zip

221.4 KB, 阅读权限: 20, 下载次数: 1

hsftp_Source.zip

38.52 KB, 阅读权限: 200, 下载次数: 1

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|上海环思 ( 沪ICP备11022428号 )

GMT+8, 2024-9-17 09:37 , Processed in 0.102141 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表