如何解决WinSCP "lcd .\" 命令在 VBA 中执行时最终在 C:\WINDOWS\system32 中,而不是像手动执行时那样的用户配置文件文件夹
通过从 Excel VBA 调用批处理文件,尝试从 SFTP 服务器下载简单的文件。这是蝙蝠:
@echo off
".\WinSCP.com" ^
/log="C:\Users\User\Documents\WinSCP.log" /ini=nul ^
/command ^
"open sftp://user:password@site.com/ -hostkey=""ssh-rsa 4096 y+key=""" ^
"cd /" ^
"lcd .\" ^
"get file.TXT" ^
"exit"
exit
如果我手动运行 bat,脚本运行完美,但如果从 VBA 调用它不会执行。
我试过了:
Set oSHELL = VBA.CreateObject("WScript.shell")
exitCode = oSHELL.Run("""C:\Users\" & Environ("username") & "\Folder\Folder Name Has Spaces\sftp.bat""",True)
If exitCode <> 0 Then
MsgBox "Failed to download TN1!",vbCritical,"Failure"
Else
MsgBox "Downloaded successfully",vbOKOnly,"Success"
End If
而且,简单地说:
Call Shell("""C:\Users\" & Environ("username") & "\Folder\Folder Name Has Spaces\sftp.bat""",True)
编辑:我将它指向 program files (x86)
winscp.com
文件,它生成了一个日志。 lcd .\
指向受限文件夹 (system32
):
> 2021-05-21 10:54:10.918 Script: lcd .\
< 2021-05-21 10:54:10.918 Script: C:\WINDOWS\system32
如何解决这个问题?我不能使用绝对文件路径,因为根据用户名不同,它会有所不同。
解决方法
lcd .\
什么都不做!如果批处理文件有效,当您手动运行它时,只是因为批处理文件从一开始就在正确的工作目录中启动,而不是因为 lcd .\
。
如果您想在当前用户的配置文件文件夹的 syncfolder
子文件夹中工作,无论批处理文件是从哪里执行的,请使用:
"lcd ""%USERPROFILE%\syncfolder""" ^
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。