【问题标题】:Using 'for' command to find and download the latest file on SFTP server in PSFTP使用“for”命令在 PSFTP 中查找和下载 SFTP 服务器上的最新文件
【发布时间】:2019-11-01 09:06:36
【问题描述】:

我已通过以下指南设置 SSIS 包以检索位于 SFTP 服务器上的文本文件:

https://www.mssqltips.com/sqlservertip/3435/using-sftp-with-sql-server-integration-services/

总而言之,SSIS 包执行 PSFTP.exe(一种 PuTTY 工具),它需要必要的凭据来连接到服务器。它还需要一个在连接后执行的批处理文件。此批处理文件包含检索所需文本文件的命令。从指南开始,它只包含一个用于更改目录的 cmd 命令和一个用于检索文件的 get 命令:

cmd DataDump
get TeleMarketingResults.txt

这一切都很好。

当我尝试使这个批处理文件逻辑更复杂时出现问题,因为它似乎无法识别基本关键字。例如,我想修改它以检索最新的文件,所以我尝试添加:

for /f %%i in ('dir /b/a-d/od/t:c') do set LAST=%%i
echo The most recently created file is %LAST%

但是我得到了这些错误:

psftp: unknown command "for"
psftp: unknown command "echo"

如果我在本地目录中手动执行批处理文件,它可以工作。仅当将其作为参数传递给 PSFTP.exe 时才会出现此问题。这是为什么呢?

【问题讨论】:

  • PSFTP 显然是在读取应该执行的命令之后的批处理命令。将FTP 命令放入文件中,并使用PSFTP <filecontainingftpcommandsfor 作为下一个批处理步骤。
  • 我无法从这样的文件中传递参数来工作,它应该是 .bat 还是 .txt 文件?我是否包含“
  • 虽然@Magoo 的建议在某些情况下会有所帮助(比如如果您想上传最新的本地文件),但它不会在这种情况下为您提供帮助(下载最新的远程文件)。您显然想在 SFTP 服务器上运行 dir。但这是不可能的。恐怕你在这里浪费时间。

标签: batch-file ssis sftp psftp


【解决方案1】:

psftp 脚本文件只能包含 psftp 命令。 forsetdir 不是 psftp 命令。

几乎没有任何合理的方法可以使用 psftp 检索最新文件。您必须分两步完成。首先检索列表并将其存储到文件中。然后使用一些智能批处理文件命令解析该文件以查找最新文件。然后再次运行 psftp 以下载该文件。它需要两个连接,既麻烦又低效。

您最好使用功能更强大的 SFTP 客户端。例如,我的WinSCP SFTP client 是微不足道的。见

【讨论】:

  • 我实际上一直在使用 WinSCP GUI 来满足基本的 FTP 需求,但甚至没有意识到它具有的脚本功能,“get -latest”命令肯定更加简洁和用户友好,谢谢这让我走上了一条更好的道路!
猜你喜欢
  • 2014-06-07
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 2011-06-08
  • 2020-08-05
  • 1970-01-01
  • 2016-12-04
  • 1970-01-01
相关资源
最近更新 更多