2015-05-07 3 views
1

Я делаю пакетный файл для загрузки файла в одну конкретную папку на SFTP-сервере. Когда я запускаю файл с планировщиком задач, он не показывает мне никакой ошибки, но ничего не загружается в папку SFTP клиента. Вот мой серийный скрипт:Загружать файл timestamped с помощью SFTP с помощью WinSCP

@echo off 

REM Defines an exiting variable to be added onto each file giving it a time-stamp and exiting the current instance of WinSCP. 
set d=%date:~-4,4%%date:~4,2%%date:~-7,2% 
set d=%d: =_% 

REM Creates the variable lines to shorten the SFTP file upload. 
REM Example usage --> %transferStart%ourFile.txt %transferEnd%TheirFile.txt%e% 
SET upload=winscp.exe /console /command "option confirm off" "open sftp://user:[email protected]" "c:\apps\ftpfiles\name_%d%.txt" "put \\mainfolder\inbound\" "close" 
+0

Вы не закрывающие кавычки в конце? –

+0

нет, в оригинальной версии у меня есть код закрытия, я добавил сюда. Спасибо, что сообщили мне об этом. –

+0

У меня есть код, еще нет результатов. –

ответ

1

У вас много проблем в вашем пакетном файле. Я могу определить по крайней мере:

  • Вы можете установить переменные окружения upload (по причине я не понимаю), и вы не используете его. Вызов WinSCP непосредственно вместо:

    winscp.exe /console /command ... 
    
  • Хотя не строго неправильно, используя (приложение GUI) winscp.exe из пакетного файла-усложняет отладку (он запускает отдельное окно или процесс WinSCP). Вместо этого используйте winscp.com (console application). С winscp.com параметр /console избыточна:

    winscp.com /command ... 
    
  • используется имя файла "c:\apps\ftpfiles\name_%d%.txt", как если бы это была команда. Если вы хотите загрузить этот конкретный файл, используйте путь в put command:

    "put c:\apps\ftpfiles\name_%d%.txt" 
    
  • Вы пропускаете -hostkey переключатель в open command для verify your server's hostkey.

  • Вам не хватает exit commandclose до exit является избыточным).

  • Получение временной метки из date переменной среды является ненадежной (значение date является специфичным для локали). Используйте WinSCP %TIMESTAMP% construct:

    "put c:\apps\ftpfiles\name_%TIMESTAMP#yyyymmdd%.txt" 
    

    (Вы должны использовать WinSCP 5,7 или более поздней версии для %TIMESTAMP%.)

  • С последней версии WinSCP, то option confirm off is unnecessary.

Все, что применяется, ваш пакетный файл будет состоять из одной команды:

@echo off 

winscp.com /command^
    "open sftp://user:[email protected] -hostkey=""your-servers-hostkey"""^
    "put c:\apps\ftpfiles\name_%%TIMESTAMP#yyyymmdd%%.txt"^
    "exit" 
+0

Спасибо за ответ Мартин. Я использовал временную метку, которую вы предоставили, но это планировщик заданий дает мне неправильную функцию, когда я добавляю это. % TIMESTAMP # yyyymmdd% –

+0

Простите, но это очень расплывчато. Что значит «планировщик заданий дает мне неправильную функцию»? –

+0

Это msg в последнем запуске результата задачи: «Недопустимая функция». Я просто заметил, что мы используем WinSCP 5.1.1, это% TIMESTAMP # yyyymmdd%, работающий над этой версией? –

Смежные вопросы