技术问询:从FTP下载文件至每日日期命名文件夹的代码实现
批处理FTP下载脚本的验证与完善方案
我看了你的批处理脚本,发现几个需要调整的细节,同时给你优化了方案,确保脚本更稳定、通用,适配不同系统环境:
原脚本存在的问题
- 日期格式依赖系统区域:
date /T的输出会因系统语言/区域设置不同(比如美式MM/DD/YYYY和中式YYYY/MM/DD)导致文件夹命名混乱,甚至创建失败 - 时间变量语法错误:你的时间赋值语句引号位置错误,会生成带多余引号的文件夹名称,不符合预期
- FTP命令调用方式错误:批处理中直接写
FTP open ...无法正确执行,FTP需要通过输入重定向或脚本文件的方式传递命令
改进后的完整脚本
@echo off setlocal enabledelayedexpansion :: 获取标准化的日期时间(避免区域差异) for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set "dt=%%a" set "datestr=!dt:~0,4!-!dt:~4,2!-!dt:~6,2!" set "timestr=!dt:~8,2!-!dt:~10,2!" :: 创建目标文件夹(格式:YYYY-MM-DD HH-MM) set "targetDir=C:\%datestr% %timestr%" mkdir "%targetDir%" 2>nul :: 生成临时FTP脚本文件 set "ftpScript=%temp%\ftp_download.txt" echo open 127.0.0.1 > "%ftpScript%" echo admin >> "%ftpScript%" echo 123 >> "%ftpScript%" echo cd /ftpsrv >> "%ftpScript%" echo lcd "%targetDir%" >> "%ftpScript%" echo prompt >> "%ftpScript%" echo mget *.* >> "%ftpScript%" echo quit >> "%ftpScript%" :: 执行FTP下载 ftp -s:"%ftpScript%" :: 清理临时脚本 del "%ftpScript%" endlocal echo 下载完成,文件已保存至 %targetDir%
关键优化说明
- 标准化日期时间:用
wmic os get localdatetime获取系统统一格式的时间字符串(YYYYMMDDHHMMSS...),拆分后生成YYYY-MM-DD的日期和HH-MM的时间,彻底避免区域差异问题 - 合法文件夹名称:用短横线替代冒号等非法字符,同时用引号包裹路径,避免路径中包含空格时出错
- 标准FTP调用方式:通过生成临时脚本文件的方式传递FTP命令,这是批处理中执行FTP操作的规范方式,确保命令正确执行
- 细节优化:添加
@echo off关闭命令回显,2>nul屏蔽文件夹已存在的提示,最后自动清理临时脚本,保持环境整洁
额外注意事项
- 如果你的FTP服务器使用非默认端口(默认21),需要在
open命令后追加端口,比如open 127.0.0.1 2121 - 确保账号
admin和密码123有权限访问/ftpsrv目录并下载文件 - 若只需下载特定类型文件,可将
mget *.*改为mget *.pdf等匹配模式
内容的提问来源于stack exchange,提问作者haitham ziyani
相关产品推荐
相关产品推荐

