Загрузить только последний файл с WinSCP

15819
molecule

Я довольно новичок в WinSCP. Я хотел бы знать, позволит ли это приложение отправлять только самые последние измененные файлы из локального каталога в удаленный каталог. Обратите внимание, что содержимое обеих папок не совпадает в любой момент времени, поэтому синхронизация невозможна.

Мне удалось установить соединение и «положить» файл на сервер. Однако я не могу понять, как мне достичь того, чего я хочу достичь.

Вот мои команды ...

winscp.exe /console /command "option batch on" "open ftp://user:pass@remoteip:port -explicitssl -passive" "put c:\files\Completed /Test" "exit" /log=c:\winscp_log.txt

Любая помощь очень ценится ...

2
См. Пример WinSCP [Загрузка самого последнего файла] (https://winscp.net/rus/docs/script_upload_most_recent_file). Martin Prikryl 8 лет назад 0

2 ответа на вопрос

3
shf301

Вы не сможете сделать это с помощью WinScp. Это сценарии не так сложны. Вам придется использовать другой язык сценариев, чтобы получить последний файл.

Например, этот пакетный файл:

@echo off  for /f "delims=" %%i in ('dir /b /od c:\files\Completed\*') do set LastFile=%%i  winscp.exe /console /command "option batch on" "open ftp://user:pass@remoteip:port -explicitssl -passive" "put c:\files\Completed\%LastFile% /Test" "exit" /log=c:\winscp_log.txt 
@ shf301 - привет, это очень полезный совет. На данный момент я считаю, что он делает именно то, для чего предназначен. Однако переменная LastFile, похоже, не захватывает все имя файла, если оно содержит пробелы? Извините за мое невежество, но как я могу изменить его, чтобы захватить пробелы в имени файла? Ошибка журнала winscp гласит: «Системе не удается найти указанный файл» c: \ files \ Completed \ Copy », но фактическое имя файла -« c: \ files \ Completed \ Copy of text.txt ». Оцените его, если вы можете показать мне, как манипулировать линией "для" molecule 13 лет назад 0
Я обновил свой ответ. По умолчанию for разделяется на пробелы, если установить разделители на ничего («delims =»), это не приведет к разбивке имени файла. shf301 13 лет назад 0
@ shf301 - большое спасибо. Это сработало именно так, как я хотел, чтобы все было настроено. Ценю твою помощь. Если спросить не так уж и много, у меня возникла еще одна проблема со сценариями, и я хотел бы получить вашу помощь, если это возможно Я не хочу быть грубым и вставить это здесь, прежде чем я спросил, готовы ли вы взглянуть :) Пожалуйста, дайте мне знать. Спасибо! molecule 13 лет назад 0
@ shf301 - извините за невежество, но что делает %%? когда я удаляю @echo off, я вижу, что он проходит% i. Причина, по которой я спрашиваю, когда я пытаюсь запустить скрипт на другом компьютере, цикл for не сохраняет имя файла таким, каким оно работало на моем ПК. «для» все еще выглядит так, как будто оно разделяет пробелы и не может их распознать. molecule 13 лет назад 0
%% i - это переменная. Переменные в пакетных файлах всегда начинаются с%. Пакетный процесс удаляет один, поэтому цикл for видит только один%. Я не уверен, почему это не работает, хотя. shf301 13 лет назад 1
@ shf301 - похоже, когда я помещаю ту же команду на другом компьютере - я вижу LastFile = dir / b / od c: \ files \ Completed \ *, а не LastFile = filename.ext molecule 13 лет назад 0
Спасибо за это решение. Я повторно использовал его (с соответствующим кредитом и некоторыми улучшениями) для документации WinSCP: [Загрузка самого последнего файла] (http://winscp.net/eng/docs/script_upload_most_recent_file#using_winscp_scripting) Martin Prikryl 9 лет назад 0
2
Martin Prikryl

putКоманда WinSCP имеет -latestпереключатель:

put -latest c:\files\Completed\* /Test/ 

Для получения дополнительной информации см. Статью WinSCP Загрузка самого последнего файла .

Похожие вопросы