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