我正在使用 OpenSSH。从独立 Java 程序调用时,下面的 bat 文件代码可以正确传输文件。
@echo off
del "D:\path\inctf2.txt" /s /f /q
set par1=%1
set par2=%2
set par3=%3
set par4=%4
>>D:\path\inctf2.txt echo lcd %par2%
>>D:\path\inctf2.txt echo cd %par1%
>>D:\path\inctf2.txt echo put %par3% %par4%
>>D:\path\inctf2.txt echo quit
C:
cd C:\Program Files\OpenSSH-Win64
sftp.exe -b D:\path\inctf2.txt userName@IP >> D:\path\%par3%%para4%.log 2>&1
goto END
:END
但是当从 weblogic 服务器上部署的 war 中的类文件中调用 bat 文件时。它失败并出现以下错误:
无法创建目录 '%systemroot%\system32\config\systemprofile/.ssh'。percent_expand: 未知键 %s 连接已关闭
将 .ssh 文件夹从 windows>User>Administrator 复制到 D:\path,还为 User:everyone 提供了完全控制权,但没有运气。
Java 代码:
processBuilder.command("cmd", "/c", "transfer.bat",cdRemoteDir, localDir_For_fileName,
fileName, remoteFileName );
Process process = processBuilder.start();
int exitVal = process.waitFor();
尝试以下代码也具有相同的结果:
Runtime.getRuntime().exec(
从命令行执行时:
C:\Program Files\OpenSSH-Win64>user_name@ip_address
Connected to ip_address.
sftp> cd $DVL2.CAFINP
sftp> lcd F:\local_file_path
sftp> put OC130319.001 OC130301 0,500,500,800
Uploading OC130319.001 to /G/DVL2/CAFINP/OC130301
OC130319.001
sftp> ls -lrt OC130301
-********* 0 4294952959 199 16718 Apr 30 10:45 OC130301
sftp>
最后,我转到了 bat 文件中使用以下命令的 WinSCP:
C:
cd C:\WinSCP5.13.7
winscp.com /script=script.txt >>D:\path\logs\alpha.txt
open sftp_ppk_auth
cd $DVL2.CAFINP
lcd F:\local_path\
put MANCAF OUT4567,0,500,500,800
exit
sftp_ppk_auth 已保存 WinSCP 会话
文件已成功传输,但以下错误消息已记录到日志中:
曼卡夫 | 217589 KB | 2618.9 KB/秒 | 二进制 | 100% 传输已成功完成, 但无法将临时传输文件“OUT4567,0,500,500,800.filepart”重命名为目标文件名“OUT4567,0,500,500,800”。