Board logo

标题: [FTP] 批处理完成FTP下载远程备份文件到本地 [打印本页]

作者: zc_0101    时间: 2009-6-26 21:30     标题: 批处理完成FTP下载远程备份文件到本地

批处理功能:

          输入几个参数,让批处理代你完成烦琐的工作吧!远程FTP文件到本地计算机,你可以拖入开机启动或任务计划中,定时下载远程的指定数据,希望大家多测试,多提意见,多完善,谢谢!上代码!

举例说明:

      我需要每天早上从服务器202.33.22.102上下载指定目录的文件到本机,那么你需要指定以下几个参数即可

      一、远程IP,Is not null  

      二、FTP用户名,Is not null

      三、远程密码,Is not null

      四、下载哪个目录下的文件,如果是根目录则输入点点,即".."(没有双引号)

      五、子目录,你可能要下载一个文件夹下的多个目录吧?如果有,请用逗号隔开,如果没有则什么也不要设置(包括空格),文件夹名请间量不要有空格,以免不必要的麻烦,当你指定了子目录时,程序只会下载该子目录下的文件,而对再下一级文件夹不做任何操作。

      六、本地目录,请指定一个已存在的目录,包括"\",程序会自动在该文件夹下创建和服务器上相同的文件夹

      七、日志记录文件目录,也是已存在的。

       好了,你现在可以双击这个批处理执行操作了!
作者: zc_0101    时间: 2009-6-26 21:30

  1. @echo off
  2. echo ********======================================================
  3. echo ********======================================================
  4. echo ++++++++    批处理功能: 远程数据FTP备份到本地
  5. echo ++++++++    Date:    %Date:~0,4%-%Date:~5,2%-%Date:~8,2%
  6. echo ++++++++    Author:    zc_0101                 
  7. echo ++++++++    Blog:    www.cnblogs.com/zc_0101
  8. echo ++++++++    Email:    zc_0101@163.com
  9. echo ++++++++    QQ:    275374095
  10. echo ++++++++    Mark:
  11. echo ++++++++        请严格按照参数说明定义参数,输入参数
  12. echo ++++++++        请尽量常规化,不要带特殊字符包括空格
  13. echo ++++++++        如果文件已存在则跳过,不支持短点续传
  14. echo ++++++++        不检测备份数据完整性,用户可自行修改
  15. echo ++++++++        最后更新:2009-07-15
  16. echo ++++++++    PS:    转载请注明出处(^_^),谢谢!
  17. echo ********======================================================
  18. echo ********======================================================
  19. pause
  20. Rem 远程IP(请保证开启Server_U)
  21. Set Remote_IP=213.113.124.233
  22. Rem 远程登录用户名
  23. Set Remote_User=test
  24. Rem 远程登录密码
  25. Set Remote_Pwd=FkhVBweos^!Sd4al%%
  26. Rem 远程操作目录,如果是根目录,请填写".."(无双引号),否则直接填写目录名,如Databaseback
  27. set Remote_Path=Databaseback
  28. Rem 远程要下载的目录列表(注意:仅下载这些目录下的文件,不会下载子目录下的文件),请用逗号隔开,如果没有子目录(确保当前目录下有文件可下载),请什么也不要填写(包括空格);另:文件夹请不要有空格
  29. Set Remote_Directory=DB_Hxxl,DB_OA,master,model,msdb
  30. Rem 本地备份目录,请填写一个已存在的目录(本程序将会自动在该目录下创建和远程服务器上同样的子目录,请勿带"\"斜杠)
  31. Set Local_Path=D:\DBback
  32. Rem 操作日志和临时文件存放路径(请务必带上"\"斜杠)
  33. Set Log_Path=D:\
  34. Rem 取得当前日期,作为日志文件名称,本例为日志存放目录加当日日期
  35. set today=%Log_Path%%Date:~0,4%-%Date:~5,2%-%Date:~8,2%-%Time:~0,2%%Time:~3,2%%Time:~6,2%.txt
  36. echo 正在对您输入的参数进行基本检测…………
  37. echo 正在检测输入参数…………>%today%
  38. if "%Remote_IP%" EQU "" (
  39.     echo 远程IP不能为空!请返回为Remote_IP赋值
  40.     echo 远程IP为空,程序退出。>>%today%
  41.     pause
  42.     exit
  43. )
  44. if "%Remote_User%" EQU "" (
  45.     echo 远程登录名不能为空!请返回为Remote_User赋值
  46.     echo 远程登录名为空,程序退出。>>%today%
  47.     pause
  48.     exit
  49. )
  50. if "%Remote_Pwd%" EQU "" (
  51.     echo 远程登录密码不能为空!请返回为Remote_Pwd赋值
  52.     echo 远程登录密码为空,程序退出。>>%today%
  53.     pause
  54.     exit
  55. )
  56. if "%Remote_Path%" EQU "" (
  57.     echo 远程操作目录不能为空!请返回为Remote_Path赋值,如果是对根目录操作,请输入^(点点^),即".."
  58.     echo 远程操作目录为空,程序退出。>>%today%
  59.     pause
  60.     exit
  61. )
  62. if "%Remote_Directory%" EQU " " (
  63.     echo 远程子目录有误!您是否为Remote_Directory误赋值为空格了?如果没有子目录请不要赋值,包括空格。
  64.     echo 远程子目录有误,程序退出。>>%today%
  65.     pause
  66.     exit
  67. )
  68. if "%Local_Path%\" EQU "" (
  69.     echo 本地操作目录不能为空!请返回为Local_Path赋值
  70.     echo 本地操作目录为空,程序退出。>>%today%
  71.     pause
  72.     exit
  73. )
  74. if "%Log_Path%" EQU "" (
  75.     echo 本地日志存放目录不能为空!请返回为Log_Path赋值
  76.     echo 本地日志存放目录为空,程序退出。>>%today%
  77.     pause
  78.     exit
  79. )
复制代码

[ 本帖最后由 zc_0101 于 2009-7-15 17:06 编辑 ]
作者: zc_0101    时间: 2009-6-26 21:31

  1. echo 参数基本检测通过,准备执行数据库备份
  2. echo 参数基本检测通过,数据库备份现在开始>>%today%
  3. echo 今天是%Date%,时间是:%Time:~0,2%:%Time:~3,2%:%Time:~6,2%,正在执行数据库备份…………
  4. echo 今天是%Date%,时间是:%Time:~0,2%:%Time:~3,2%:%Time:~6,2%,正在执行数据库备份…………>>%today%
  5. echo 正在创建生成文件列表的ftp文件,请稍候………
  6. echo 正在创建生成文件列表的ftp文件,请稍候…………>>%today%
  7. ping -n 3 127.1>nul
  8. echo 正在将远程登录用户名写入ftp文件…………>>%today%
  9. echo %Remote_User%>%Log_Path%command.txt
  10. echo 正在将远程登录密码写入ftp文件…………>>%today%
  11. echo %Remote_Pwd%>>%Log_Path%command.txt
  12. echo 正在将下载方式写入ftp文件…………>>%today%
  13. echo type Binary>>%Log_Path%command.txt
  14. echo 正在判断远程父目录是否为根目录 …………>>%today%
  15. if "%Remote_Path%" NEQ ".." (
  16. if "%Remote_Path%" NEQ "" (
  17. echo 正在将进入远程目录%Remote_Path%的语句写入ftp文件…………>>%today%
  18. echo cd %Remote_Path%>>%Log_Path%command.txt
  19. )
  20. )
  21. echo 正在判断远程子目录…………>>%today%
  22. if "%Remote_Directory%" NEQ "" (
  23. echo 正在将子目录列表的生成语句写入ftp文件…………>>%today%
  24. for %%i in (%Remote_Directory%) do (
  25. echo 正在将子目录列表%%i的生成语句写入ftp文件…………>>%today%
  26. echo mls %%i %Log_Path%%%i.txt>>%Log_Path%command.txt
  27. )
  28. ) else (
  29. echo 由于没有填写子目录,则将根目录下文件列表的生成语句写入ftp文件…………>>%today%
  30. echo mls .. FileList.txt>>%Log_Path%command.txt
  31. )
  32. echo close>>%Log_Path%command.txt
  33. echo quit>>%Log_Path%command.txt
  34. echo 正在对command.txt文件进行判断
  35. if not exist "%Log_Path%command.txt\" (
  36. if exist "%Log_Path%command.txt" (
  37. echo %Log_Path%command.txt文件创建成功
  38. echo %Log_Path%command.txt文件创建成功>>%today%
  39. ) else (
  40. echo %Log_Path%command.txt文件创建失败,程序将退出。
  41. echo %Log_Path%command.txt文件创建失败,程序退出>>%today%
  42. pause
  43. echo exit
  44. )
  45. ) else (
  46. echo 您输入的参数存放日志路径中有竟然有一个名为Command.txt的文件夹,请手动删除后,重新运行程序。
  47. echo 您输入的参数存放日志路径中竟然有有一个名为Command.txt的文件夹,程序退出。>>%today%
  48. pause
  49. exit
  50. )
  51. echo 正在执行服务器目录文件列表创建,请稍候…………
  52. echo 正在执行服务器目录文件列表创建,请稍候…………>>%today%
  53. ping -n 3 127.1>nul
  54. ftp -i -s:%Log_Path%command.txt %Remote_IP%
  55. echo 正在检查已创建的服务器目录文件列表,请稍候…………
  56. echo 正在检查已创建的服务器目录文件列表,请稍候…………>>%today%
  57. if "%Remote_Directory%" NEQ "" (
  58. for %%i in (%Remote_Directory%) do (
  59. if not exist "%Log_Path%%%i.txt\" (
  60. if exist "%Log_Path%%%i.txt" (
  61. echo %Log_Path%%%i.txt文件创建成功!
  62. echo %Log_Path%%%i.txt文件创建成功!>>%today%
  63. ) else (
  64. echo 对不起,%Log_Path%%%i.txt文件创建失败!程序将退出!
  65. echo %Log_Path%%%i.txt文件创建失败!程序终止>>%today%
  66. pause
  67. exit
  68. )
  69. ) else (
  70. echo 您输入的参数存放日志路径%Log_Path%中有竟然有一个名为%%i.txt的文件夹,请手动删除后,重新运行程序。
  71. echo 您输入的参数存放日志路径%Log_Path%中竟然有有一个名为%%i.txt的文件夹,程序退出。>>%today%
  72. pause
  73. exit
  74. )
  75. )
  76. ) else (
  77. if not exist "%Log_Path%FileList.txt\" (
  78. if exist "%Log_Path%FileList.txt" (
  79. echo %Log_Path%FileList.txt文件创建成功!
  80. echo %Log_Path%FileList.txt文件创建成功!>>%today%
  81. ) else (
  82. echo 对不起,%Log_Path%FileList.txt文件创建失败!
  83. echo %Log_Path%FileList.txt文件创建失败!程序终止>>%today%
  84. pause
  85. exit
  86. )
  87. ) else (
  88. echo 您输入的参数存放日志路径%Log_Path%中有竟然有一个名为FileList.txt的文件夹,请手动删除后,重新运行程序。
  89. echo 您输入的参数存放日志路径%Log_Path%中竟然有有一个名为FileList.txt的文件夹,程序退出。>>%today%
  90. pause
  91. exit
  92. )
  93. )
  94. echo 程序开始下载文件,请耐心等待…………
  95. echo 程序开始下载文件,请耐心等待…………>>%today%
  96. if "%Remote_Directory%" NEQ "" (
  97. for %%i in (%Remote_Directory%) do (
  98. echo 正在创建目录%Local_Path%%%i…………
  99. echo 创建目录%Local_Path%%%i…………>>%today%
  100. md %Local_Path%%%i
  101. echo 正在下载%Remote_Path%%%i文件夹备份,请稍候…………
  102. echo 正在下载%Remote_Path%%%i文件夹备份,请稍候…………>>%today%
  103. ping -n 3 127.1>nul
  104. for /f "delims=." %%j in (%Log_Path%%%i.txt) do (
  105. if not exist "%Local_Path%%%i\%%j.txt\" (
  106. if not exist "%Local_Path%%%i\%%j.txt" (
  107. echo 正在创建下载文件%%j.txt的脚本,请稍候…………
  108. echo 正在创建下载文件%%j.txt的脚本,请稍候…………>>%today%
  109. echo %Remote_User%>%Log_Path%GetFiles.txt
  110. echo %Remote_Pwd%>>%Log_Path%GetFiles.txt
  111. echo type Binary>>%Log_Path%GetFiles.txt
  112. if "%Remote_Path%" NEQ "" (
  113. if "%Remote_Path%" NEQ ".." (
  114. echo cd %Remote_Path%>>%Log_Path%GetFiles.txt
  115. )
  116. )
  117. echo cd %%i>>%Log_Path%GetFiles.txt
  118. echo lcd %Local_Path%%%i>>%Log_Path%GetFiles.txt
  119. echo mget "%%j.txt">>%Log_Path%GetFiles.txt
  120. echo close>>%Log_Path%GetFiles.txt
  121. echo quit>>%Log_Path%GetFiles.txt
  122. ftp -i -s:%Log_Path%GetFiles.txt %Remote_IP%
  123. echo 正在检查文件%Local_Path%%%i\%%j.txt,请稍候……
  124. echo 正在检查文件%Local_Path%%%i\%%j.txt,请稍候……>>%today%
  125. if exist "%Local_Path%%%i\%%j.txt\" (
  126. echo ————下载%Local_Path%%%i\%%j.txt成功!
  127. echo ————下载%Local_Path%%%i\%%j.txt成功!>>%today%
  128. ) else (
  129. echo ——由于未知原因,下载%Local_Path%%%i\%%j.txt失败!
  130. echo ——由于未知原因,下载%Local_Path%%%i\%%j.txt失败!>>%today%
  131. )
  132. ) else (
  133. echo %Local_Path%%%i\%%j.txt已存在,正在跳过————
  134. echo %Local_Path%%%i\%%j.txt已存在,正在跳过————>>%today%
  135. )
  136. ) else (
  137. echo 您输入的参数存放备份路径%Local_Path%%%i中有竟然有一个名为%%j.txt的文件夹,请手动删除后,重新运行程序。
  138. echo 您输入的参数存放备份路径%Local_Path%%%i中竟然有有一个名为%%j.txt的文件夹,程序退出。>>%today%
  139. pause
  140. exit
  141. )
  142. )
  143. )
  144. ) else (
  145. echo 由于没有指定服务器子目录,程序将把服务器父目录下的文件备份到您指定的本地目录中…………
  146. echo 由于没有指定服务器子目录,程序将把服务器父目录下的文件备份到您指定的本地目录中…………>>%today%
  147. for /f "delims=," %%j in (%Log_Path%FileList.txt) do (
  148. if not exist "%Local_Path%%%j.txt\" (
  149. if not exist "%Local_Path%%%j.txt" (
  150. echo 正在创建下载文件%%j.txt的脚本,请稍候…………
  151. echo 正在创建下载文件%%j.txt的脚本,请稍候…………>>%today%
  152. echo %Remote_User%>%Log_Path%GetFiles.txt
  153. echo %Remote_Pwd%>>%Log_Path%GetFiles.txt
  154. echo type Binary>>%Log_Path%GetFiles.txt
  155. if "%Remote_Path%" NEQ "" (
  156. if "%Remote_Path%" NEQ ".." (
  157. echo cd %Remote_Path%>>%Log_Path%GetFiles.txt
  158. )
  159. )
  160. echo lcd %Local_Path%>>%Log_Path%GetFiles.txt
  161. echo mget "%%j.txt">>%Log_Path%GetFiles.txt
  162. echo close>>%Log_Path%GetFiles.txt
  163. echo quit>>%Log_Path%GetFiles.txt
  164. ftp -i -s:%Log_Path%GetFiles.txt %Remote_IP%
  165. echo 正在检查文件%Local_Path%%%i\%%j.txt,请稍候……
  166. echo 正在检查文件%Local_Path%%%i\%%j.txt,请稍候……>>%today%
  167. if exist "%Local_Path%%%j.txt" (
  168. echo ————下载%Local_Path%%%i\%%j.txt成功!
  169. echo ————下载%Local_Path%%%i\%%j.txt成功!>>%today%
  170. ) else (
  171. echo ——由于未知原因,下载%Local_Path%%%i\%%j.txt失败!
  172. echo ——由于未知原因,下载%Local_Path%%%i\%%j.txt失败!>>%today%
  173. )
  174. ) else (
  175. echo %Local_Path%%%i\%%j.txt已存在,正在跳过————
  176. echo %Local_Path%%%i\%%j.txt已存在,正在跳过————>>%today%
  177. )
  178. ) else (
  179. echo 您输入的参数存放备份路径%Local_Path%中有竟然有一个名为%%j.txt的文件夹,请手动删除后,重新运行程序。
  180. echo 您输入的参数存放备份路径%Local_Path%中竟然有有一个名为%%j.txt的文件夹,程序退出。>>%today%
  181. pause
  182. exit
  183. )
  184. )
  185. )
  186. echo 程序正在清除临时文件,请稍候…………
  187. echo 程序将删除%Log_Path%command.txt文件…………>>%today%
  188. del %Log_Path%command.txt
  189. if exist "%Log_Path%command.txt" (
  190. echo %Log_Path%command.txt文件删除失败,程序继续运行
  191. echo %Log_Path%command.txt文件删除失败,程序继续运行>>%today%
  192. ) else (
  193. echo %Log_Path%command.txt文件删除成功
  194. echo %Log_Path%command.txt文件删除成功>>%today%
  195. )
  196. echo 程序正在删除下载备份之ftp语句文件,请稍候…………
  197. echo 程序正在删除下载备份之ftp语句文件,请稍候…………>>%today%
  198. Del %Log_Path%GetFiles.txt
  199. if exist "%Log_Path%GetFiles.txt" (
  200. echo %Log_Path%GetFiles.txt文件删除失败,程序继续运行
  201. echo %Log_Path%GetFiles.txt文件删除失败,程序继续运行>>%today%
  202. ) else (
  203. echo %Log_Path%GetFiles.txt文件删除成功
  204. echo %Log_Path%GetFiles.txt文件删除成功>>%today%
  205. )
  206. echo 程序正在删除临时文件列表文件,请稍候…………
  207. echo 程序正在删除临时文件列表文件,请稍候…………>>%today%
  208. if "%Remote_Directory%" NEQ "" (
  209. for %%i in (%Remote_Directory%) do (
  210. Del %Log_Path%%%i.txt
  211. if exist "%Log_Path%%%i.txt" (
  212. echo %Log_Path%%%i.txt文件删除失败,程序继续运行
  213. echo %Log_Path%%%i.txt文件删除失败,程序继续运行>>%today%
  214. ) else (
  215. echo %Log_Path%%%i.txt文件删除成功
  216. echo %Log_Path%%%i.txt文件删除成功 >>%today%
  217. )
  218. )
  219. ) else (
  220. del %Log_Path%FileList.txt
  221. if exist "%Log_Path%FileList.txt" (
  222. echo %Log_Path%FileList.txt文件删除失败,程序继续运行
  223. echo %Log_Path%FileList.txt文件删除失败,程序继续运行>>%today%
  224. ) else (
  225. echo %Log_Path%FileList.txt文件删除成功
  226. echo %Log_Path%FileList.txt文件删除成功>>%today%
  227. )
  228. )
  229. echo 恭喜您,本次备份工作已经圆满完成!详情请查看%today%日志文件!
  230. echo 恭喜您,本次备份工作已经圆满完成!>>%today%
  231. echo 数据已被备份到%Local_Path%目录中。>>%today%
  232. echo 完成时间:%Time:~0,2%:%Time:~3,2%:%Time:~6,2%>>%today%
  233. pause
  234. exit
复制代码

[ 本帖最后由 zc_0101 于 2009-7-15 17:08 编辑 ]
作者: jinzeyu    时间: 2011-3-6 13:00

ls...算广告吗???......
作者: 853122    时间: 2014-2-3 13:20

真厉害这个  
作者: kooapk    时间: 2019-5-12 01:07

支持一下支持一下




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2