[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 服务器环境,bat中使用ftp出现乱码

制作了一个远程备份脚本,在windows 7 环境下执行正常。
然后拷贝到服务器(widows server 2012 r2)上,想实现每天定时执行备份。
但是一运行,就出现乱码。
经检查发现,是执行ftp的cd和lcd时,将中文目录名识别为了???
请问,有什么解决办法?
谢谢。
  1. @echo off
  2. :: 指定远程服务器IP、自己的登录用户名、密码
  3. set "ftpIP=10.8.*.* 212"
  4. set "ftpUser=******"
  5. set "ftpPass=******"
  6. :: 自定义服务器上有效的备份目录源(某些目录、数据无用、无效)
  7. :: 目前可用的目录有4个,配置到Sr4。
  8. ::【注意】后面两次 for /l 中的步进结果为4,是和这里一致的。如果你需要更多目录,这3处的数量必须一致。
  9. set "Sr1=工资统发"
  10. set "Sr2=非税收入"
  11. set "Sr3=支付账务"
  12. set "Sr4=预算执行"
  13. :: 指定日期变量、本地主目录、远程数据源目录、Ftp脚本文件
  14. set "DateVbs=%Temp%\Curdate.vbs"
  15. set "LocalDir=D:\数据备份"
  16. set "FtpScript=%Temp%\FtpScript.txt"
  17. :: 通过vbs的script隐藏窗口返回日期,获取准确的日期(昨日)格式,以保证ftp备份的文件名准确,避免失败。
  18. :: 在vbs中,对执行符号(或成对的执行符号中的第2个符号),要使用^来转义,防止的bat中被直接执行而导致Vbs脚本执行失败。
  19. (echo Dt=date(^)-1
  20. echo,strDate = right(year(DT^),4^)^& "-" ^& right("0" ^& month(DT^),2^) ^& "-" ^& right("0" ^& day(DT^),2^)
  21. echo,WScript.Echo strDate)>%DateVbs%
  22. for /f "delims=" %%a in ('cscript /nologo %DateVbs%') do call set "CurDate=%%a"
  23. set "tYear=%CurDate:~0,4%"
  24. set "tMon=%CurDate:~5,2%"
  25. set "tDay=%CurDate:~8,2%"
  26. :: ftp脚本内容,特别说明:
  27. :: 1、远程服务器上的目录问题:有的存在年份目录如2021,有的没年份目录,所以对远程服务器的内容目录要执行2次,一次不带有年份,一次带有年份。
  28. :: 2、远程服务器上的文件名问题:有的使用年月日无分隔如20210212,有的使用"-"、有的使用"_"分隔。为防止遗漏,则各执行3次。
  29. :: 3、重复执行,是因为无法通过指令获取到返回信息,从而进行选择,只好重复执行(如果你有获取指令的方法,请告诉我)。不过重复的过程中,一旦发现有错则会很快停止该指令,几乎不影响备份工作效率。
  30. setlocal enabledelayedexpansion
  31. :: 自动创建新的年度目录(如果存在则不执行),不必每年创建一次。
  32. for /l %%i in (1,1,4) do (
  33. md %LocalDir%\!Sr%%i!\%tYear% >nul 2>nul
  34. )
  35. > %FtpScript% (
  36.     call echo open %ftpIP%
  37.     call echo %ftpUser%
  38.     call echo %ftpPass%
  39.     call echo bin
  40.     for /l %%i in (1,1,4) do (            
  41.             call echo,cd /!Sr%%i!
  42.             call echo,lcd %LocalDir%\!Sr%%i!\%tYear%
  43.             call echo,mget *%tYear%%tMon%%tDay%.*
  44.             call echo,mget *%tYear%-%tMon%-%tDay%.*
  45.             call echo,mget *%tYear%_%tMon%_%tDay%.*
  46.             call echo,cd /!Sr%%i!/%tYear%
  47.             call echo,lcd %LocalDir%\!Sr%%i!\%tYear%
  48.             call echo,mget *%tYear%%tMon%%tDay%.*
  49.             call echo,mget *%tYear%-%tMon%-%tDay%.*
  50.             call echo,mget *%tYear%_%tMon%_%tDay%.*   
  51.     )
  52.     call echo close
  53.     call echo bye
  54.   )
  55. setlocal disabledelayedexpansion
  56. ftp -v -i -s:%FtpScript%
  57. del  /f /q %DateVbs%
  58. del  /f /q %ftpScript%
  59. echo,---------OK-------
复制代码

返回列表