WinSCP "lcd .\" 命令在 VBA 中执行时在 C:\WINDOWS\system32 中结束,而不是像手动执行时那样的用户配置文件文件夹
WinSCP "lcd .\" command ends up in C:\WINDOWS\system32 when executed in VBA, instead of user profile folder like when executed manually
尝试通过从 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""", 0, 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""", 0, 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""" ^
尝试通过从 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""", 0, 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""", 0, 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""" ^