2017-01-04 4 views
2

У меня есть этот скрипт в пакетном файле, который загружает локальный файл на наш FTP-сервер. Мне нужно переименовать myfile.csv, чтобы суффиктировать дату и время в этом формате YYYYMMDDHHMM например. myfile_201701041333.csv. Как это может быть сделано?Пакетный скрипт для переименования файла с меткой времени на FTP-сервере после загрузки

@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

... только примечание стороны: вы можете поместить всю команду 'echo' внутри заключенного в скобки блока'() 'и переадресовать весь блок один раз на'> "% _ScriptFile%" '... – aschipfl

+0

Спасибо всем, отсортированы и работают. http://stackoverflow.com/questions/864718/how-to-append-a-date-in-batch-files для требуемого кода даты. – Emma

ответ

2

Команда put принимает необязательный второй аргумент, чтобы указать целевое имя:

put localfile remotefile 

В пакетный файл, который будет:

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

Чтобы установить %_Remotename% в датируемые имя, см.
Format date and time in a Windows batch script - Предпочитаете wmic или на основе PowerShell soluti так как решения на основе %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

С помощью команды 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 

переименовать его.