我遇到一个问题,我上传给供应商的文件在上传完成之前就被消耗了。为了解决这个问题,供应商在下面为我提供了一个位置,我可以先在其中上传文件,然后要求我在上传完成后移动它们。
删除敏感信息,我在批处理 myfile.scr 中的 sftp 命令中引用此文件
cd /from_client/payments/upload
lcd E:/uploadfiles
mput uploadfiles.xml.*
quit
这会将文件上传到远程上传目录。我知道需要让他们达到上面的水平。理论上,这将正常处理,并且文件已经存在,因此应用程序在上传完成之前不会使用它们。
我假设我需要做一项工作来构建文件列表,然后第二次循环遍历它们以对远程文件夹进行重命名,以使它们上升一个级别。
关于如何运作有什么想法吗?供应商在这里无能为力。
已经尝试了各种解决方案来看看我是否可以使用 mv 但这不是一个选项,因为它不使用 Winscp。我们只能使用批处理脚本,然后使用本机 sftp 命令。
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"
我知道您写道您不能使用其他客户端,因为:
sftp
客户端。但这并不是一成不变的。它很容易切换(你甚至不需要阅读它,所有内容都已经在我上面的代码中了)。按照 Readme.md 文件检查此项