我在批处理文件中有此脚本,该文件将本地文件上传到我们的FTP服务器。 我需要重命名myfile.csv以后缀YYYYMMDDHHMM的格式添加日期和时间,例如 myfile_201701041333.csv。 如何才能做到这一点?
@Echo Off
Set _FTPServerName=myserver
Set _UserName=myusername
Set _Password=mypassword
Set _LocalFolder=\\data\myfolder
Set _RemoteFolder=e-download
Set _Filename=myfile.csv
Set _ScriptFile=ftp1
:: Create script
>"%_ScriptFile%" Echo open %_FTPServerName%
>>"%_ScriptFile%" Echo %_UserName%
>>"%_ScriptFile%" Echo %_Password%
>>"%_ScriptFile%" Echo lcd %_LocalFolder%
>>"%_ScriptFile%" Echo cd %_RemoteFolder%
>>"%_ScriptFile%" Echo binary
>>"%_ScriptFile%" Echo put %_Filename%
>>"%_ScriptFile%" Echo quit
:: Run script
ftp -s:"%_ScriptFile%"
Del"%_ScriptFile%"
...仅需注意:您可以将所有echo命令放在带括号的块( )内,然后通过>"%_ScriptFile%"将整个块重定向一次...
谢谢大家,整理和工作。 stackoverflow.com/questions/864718/了解所需的日期代码。
put命令接受可选的第二个参数来指定目标名称:
put localfile remotefile
在您的批处理文件中将是:
>>"%_ScriptFile%" Echo put %_Filename% %_Remotename%
要将%_Remotename%设置为带有时间戳的名称,请参见
在Windows批处理脚本中设置日期和时间的格式–首选基于wmic或基于PowerShell的解决方案,因为基于%date%的解决方案与语言环境无关。
使用一些更高级的FTP客户端,您的任务将变得更容易。
例如,使用WinSCP FTP客户端,它很简单:
@Echo Off
Set _FTPServerName=myserver
Set _UserName=myusername
Set _Password=mypassword
Set _LocalFolder=\\data\myfolder
Set _RemoteFolder=e-download
Set _Filename=myfile.csv
winscp.com /ini=nul /command ^
"open ftp://%_UserName%:%_Password%@%_FTPServerName%/" ^
"put""%_LocalFolder%\%_Filename%""""%_RemoteFolder%/myfile_%%TIMESTAMP#yyyymmddhhnn%%.csv""" ^
"exit"
参考文献:
自动将文件传输到FTP服务器;
%TIMESTAMP%语法。
(我是WinSCP的作者)
使用命令wmic os get localdatetime /value,您可以得到几乎完全适合您的需求的输出。现在,通过一些额外的代码,您可以将其调整为最合适的位置:
@echo off
setlocal EnableDelayedExpansion
for /f"delims=.= tokens=2" %%n in ('wmic os get localdatetime /value') do (
set var=%%n
set var=!var:~0,-2!
)
echo %var%
对于上面命令中的每个输出,请使用=和.之间的文本。将该文本保存到变量var中,修剪最后2个字符以删除秒。
现在您可以执行以下操作:
ren myfile.csv myfile_%var%.csv
重命名它。