Windows 批处理脚本将 SFTP 文件传输到远程位置,然后在完成后将它们移动到目录中

问题描述 投票:0回答:2

我遇到一个问题,我上传给供应商的文件在上传完成之前就被消耗了。为了解决这个问题,供应商在下面为我提供了一个位置,我可以先在其中上传文件,然后要求我在上传完成后移动它们。

删除敏感信息,我在批处理 myfile.scr 中的 sftp 命令中引用此文件

cd /from_client/payments/upload
lcd E:/uploadfiles
mput uploadfiles.xml.*
quit

这会将文件上传到远程上传目录。我知道需要让他们达到上面的水平。理论上,这将正常处理,并且文件已经存在,因此应用程序在上传完成之前不会使用它们。

我假设我需要做一项工作来构建文件列表,然后第二次循环遍历它们以对远程文件夹进行重命名,以使它们上升一个级别。

关于如何运作有什么想法吗?供应商在这里无能为力。

已经尝试了各种解决方案来看看我是否可以使用 mv 但这不是一个选项,因为它不使用 Winscp。我们只能使用批处理脚本,然后使用本机 sftp 命令。

batch-file sftp
2个回答
1
投票

您可以使用批处理文件为每个文件生成

put
rename
命令,如下所示:

set SOURCE=E:\uploadfiles
set SCRIPT=myfile.scr

(
  echo cd /from_client/payments/upload
  echo lcd %SOURCE%
  for %%F in (%SOURCE%\*) do (
    echo put %%~nF
    echo rename %%~nF /final/path/%%~nF
  )
  echo quit
) > %SCRIPT%

sftp user@host -b %SCRIPT%

它应该生成这样的脚本:

cd /from_client/payments/upload
lcd E:\uploadfiles
put one.txt
rename one.txt /final/path/one.txt
put two.txt
rename two.txt /final/path/two.txt
put three.txt
rename three.txt /final/path/three.txt
quit

虽然有一个更有能力的客户,这会更容易。例如 my WinSCP 支持使用

mv
命令使用通配符,因此您可以简单地执行以下操作:

WinSCP.com /ini=nul /log=winscp.log /command ^
    "open sftp://user:password@host/ -hostkey=""...""" ^
    "put E:\uploadfiles\* /from_client/payments/upload/" ^
    "mv /from_client/payments/upload/* /final/path/" ^
    "exit"

我知道您写道您不能使用其他客户端,因为:

  1. “它没有使用 WinSCP” – 什么“它”?是!使用最适合您任务的工具。
  2. “我们只能使用...本机 sftp 命令” – 没有 “本机 sftp 命令”。只有您正在使用的客户端的命令。当前您正在使用 OpenSSH
    sftp
    客户端。但这并不是一成不变的。它很容易切换(你甚至不需要阅读它,所有内容都已经在我上面的代码中了)。

0
投票

按照 Readme.md 文件检查此项

https://github.com/almamun977/IIS_LOG_TRANSFER

© www.soinside.com 2019 - 2024. All rights reserved.