WinSCP SFTP 上传结束状态码 3

Status Code 3 at the end of WinSCP SFTP upload

我有一个 Java 服务器技术(特别是 Inductive Automation 的 Ignition)调用一个批处理文件,该文件旨在使用 WinSCP 在一夜之间将一些文本文件传输给我们的客户。它不起作用,我不确定为什么。

这是批处理文件——实际信息已更改,因此任何拼写错误都不代表实际的批处理文件。注意

set sftpPathData=C:\SFTP\Up\Data*.txt.gpg
echo sftpPathData
FOR /F "delims=|" %%I IN ('DIR %sftpPathData% /B /O:D') DO SET NewestDataFile=%%I
echo NewestDataFile is %NewestDataFile%
set filePathData=C:\SFTP\Up\%NewestDataFile%
"C:\Program Files (x86)\WinSCP\WinSCP.exe" SiteName /log=c:\temp\winscp2.log /loglevel=* /privatekey=C:\Keys\key_nopassphrase.ppk /command "open sftp://User:password.url.net:6055/" "cd firstdirectory\secondDirectory\"  "put %filePathData%" "close"
exit /b

我通过 Python(技术上是 Jython)子进程调用调用它并记录 stderr,但我没有看到任何问题 - 过去一个月我的日志中没有任何关于 stderr 的内容。

在 WinSCP 日志中,这是我所看到的——我截断了很多内容,但显示了我认为相关的内容,它登录并尝试复制文件,但我看到 Status code: 3 而以前它正在工作,这是一个 Status code: 0.

今天早上的日志 -

. 2022-01-07 04:10:02.120 Copying "C:\SFTP\Up\Data01072020.txt.gpg" to remote directory started.
. 2022-01-07 04:10:02.120 Binary transfer mode selected.
. 2022-01-07 04:10:02.120 Opening remote file.
> 2022-01-07 04:10:02.120 Type: SSH_FXP_OPEN, Size: 76, Number: 771
< 2022-01-07 04:10:02.520 Type: SSH_FXP_HANDLE, Size: 10, Number: 771
> 2022-01-07 04:10:02.521 Type: SSH_FXP_WRITE, Size: 4118, Number: 1286
. 2022-01-07 04:10:02.523 16 skipped SSH_FXP_WRITE, SSH_FXP_READ, SSH_FXP_DATA and SSH_FXP_STATUS packets.
> 2022-01-07 04:10:02.523 Type: SSH_FXP_CLOSE, Size: 10, Number: 5636
> 2022-01-07 04:10:02.523 Type: SSH_FXP_SETSTAT, Size: 72, Number: 1033
< 2022-01-07 04:10:02.547 Type: SSH_FXP_STATUS, Size: 49, Number: 1286
< 2022-01-07 04:10:02.561 Type: SSH_FXP_STATUS, Size: 49, Number: 1542
< 2022-01-07 04:10:02.561 Type: SSH_FXP_STATUS, Size: 49, Number: 1798
< 2022-01-07 04:10:02.564 Type: SSH_FXP_STATUS, Size: 49, Number: 2054
< 2022-01-07 04:10:02.565 Type: SSH_FXP_STATUS, Size: 49, Number: 2310
< 2022-01-07 04:10:02.579 Type: SSH_FXP_STATUS, Size: 49, Number: 2566
< 2022-01-07 04:10:02.583 Type: SSH_FXP_STATUS, Size: 49, Number: 2822
< 2022-01-07 04:10:02.586 Type: SSH_FXP_STATUS, Size: 49, Number: 3078
< 2022-01-07 04:10:02.587 Type: SSH_FXP_STATUS, Size: 49, Number: 3334
< 2022-01-07 04:10:02.588 Type: SSH_FXP_STATUS, Size: 49, Number: 3590
< 2022-01-07 04:10:02.588 Type: SSH_FXP_STATUS, Size: 49, Number: 3846
< 2022-01-07 04:10:02.588 Type: SSH_FXP_STATUS, Size: 49, Number: 4102
< 2022-01-07 04:10:02.595 Type: SSH_FXP_STATUS, Size: 49, Number: 4358
< 2022-01-07 04:10:02.601 Type: SSH_FXP_STATUS, Size: 49, Number: 4614
< 2022-01-07 04:10:02.601 Type: SSH_FXP_STATUS, Size: 49, Number: 4870
< 2022-01-07 04:10:02.602 Type: SSH_FXP_STATUS, Size: 49, Number: 5126
< 2022-01-07 04:10:02.602 Type: SSH_FXP_STATUS, Size: 49, Number: 5382
< 2022-01-07 04:10:02.772 Type: SSH_FXP_STATUS, Size: 40, Number: 5636
< 2022-01-07 04:10:02.772 Status code: 0
. 2022-01-07 04:10:02.772 Preserving timestamp [2022-01-07T09:00:01.000Z]
< 2022-01-07 04:10:02.807 Type: SSH_FXP_STATUS, Size: 176, Number: 1033
< 2022-01-07 04:10:02.807 Status code: 3
. 2022-01-07 04:10:02.807 Transfer done: 'C:\SFTP\Up\Data01072020.txt.gpg' [65702]
> 2022-01-07 04:10:02.808 Script: close
. 2022-01-07 04:10:02.808 Closing connection.
. 2022-01-07 04:10:02.808 Sending special code: 12
. 2022-01-07 04:10:02.808 Sent EOF message

这条线运行时 -

< 2022-01-07 04:10:02.807 Status code: 3

会显示为

< 2022-01-07 04:10:02.807 Status code: 0

非常感谢能为我指明正确方向的任何帮助或能力。我在这里 https://winscp.net/eng/docs/sftp_codes 看到 3 表示

Permission denied The user does not have sufficient permissions to perform the operation.

作为调用批处理文件的Windows服务的Java服务器技术运行以管理员帐户登录。

直接使用 WinSCP GUI 我可以将文件拖放到适当的远程目录中。

我很茫然。任何有关如何解决此问题或使用 WinSCP 执行此操作的不同方法的信息(每天一次通过 WinSCP 将特定目录中具有特定扩展名的最新两个文件发送到远程服务器)将不胜感激。

对我来说,它看起来像这个问题:
Why is uploaded file not showing in a remote directory or showing with a different name?

代码 3 很可能是尝试更新刚刚上传的文件的时间戳失败,同时 deleted/moved。为什么它有时成功有时失败可能只是时间问题。有时 WinSCP 可能会在文件获取 deleted/moved 之前设法更新时间戳,有时则不会。您可能希望使用 -nopreservetime switch of the put command.

禁用时间戳更新