在 PSFTP 中使用 'for' 命令查找并下载 SFTP 服务器上的最新文件
Using 'for' command to find and download the latest file on SFTP server in PSFTP
我已按照以下指南设置 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 脚本文件只能包含 psftp 命令。 for
、set
或 dir
不是 psftp 命令。
几乎没有任何合理的方法可以使用 psftp 检索最新文件。您必须分两步完成。首先检索列表并将其存储到文件中。然后使用一些智能批处理文件命令解析该文件以查找最新文件。然后 运行 psftp 再次下载该文件。由于需要两个连接,因此很麻烦且效率低下。
你最好使用更强大的SFTP客户端。例如,这对我的 WinSCP SFTP client 来说是微不足道的。参见
- 问题WinSCP select most recent file或
- WinSCP 文章 Downloading the most recent file。
我已按照以下指南设置 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 脚本文件只能包含 psftp 命令。 for
、set
或 dir
不是 psftp 命令。
几乎没有任何合理的方法可以使用 psftp 检索最新文件。您必须分两步完成。首先检索列表并将其存储到文件中。然后使用一些智能批处理文件命令解析该文件以查找最新文件。然后 运行 psftp 再次下载该文件。由于需要两个连接,因此很麻烦且效率低下。
你最好使用更强大的SFTP客户端。例如,这对我的 WinSCP SFTP client 来说是微不足道的。参见
- 问题WinSCP select most recent file或
- WinSCP 文章 Downloading the most recent file。