上载后在FTP服务器上使用时间戳重命名文件的批处理脚本

时间:2017-01-04 13:37:45

标签: batch-file ftp

我在批处理文件中有这个脚本,它将本地文件上传到我们的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%"

2 个答案:

答案 0 :(得分:3)

put命令接受可选的第二个参数来指定目标名称:

put localfile remotefile

在您的批处理文件中:

>>"%_ScriptFile%" Echo put %_Filename% %_Remotename%

要将%_Remotename%设置为带时间戳的名称,请参阅
Format date and time in a Windows batch script - 首选wmic或基于PowerShell的解决方案,因为基于%date%的解决方案不依赖于区域设置。

使用更高级的FTP客户端,您的任务会更容易。

例如WinSCP FTP client就像:

一样简单
@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"

参考文献:

(我是WinSCP的作者)

答案 1 :(得分:1)

使用命令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

重命名。