如何引用WinSCP脚本所在目录实现文件下载?VBA调用场景下lcd路径失效问题求助
解决VBA调用WinSCP脚本时本地目录路径错误的问题
我来帮你搞定这个问题——核心问题出在你用%CD%获取的是当前工作目录,而不是脚本本身所在的目录。当VBA调用批处理脚本时,当前工作目录往往不是你存放脚本的SharePoint同步文件夹,这就导致WinSCP无法把文件下载到正确的位置。
解决方案:用%~dp0获取脚本所在目录
批处理有个内置变量%~dp0,它会返回脚本文件本身所在的完整路径(包含驱动器号和末尾的反斜杠),不管脚本是从哪个路径被调用的,都能精准指向它自己的存放位置,完美适配你这种不同用户SharePoint同步路径有差异的场景。
调整后的完整脚本代码
把原来的lcd ""%CD%"""替换成lcd ""%~dp0"""即可,其余代码保持不变:
@echo off "C:\Program Files (x86)\WinSCP\WinSCP.com" ^ /command ^ "open sftp://mysite.gov/ -hostkey=""ssh-rsa 4096 key#######=""" ^ "cd /" ^ "lcd ""%~dp0""" ^ "get File1.TXT" ^ "get File2.csv" ^ "get File3.csv" ^ "exit" timeout 10 exit
额外说明
%~dp0会自动处理路径中的空格,所以不需要额外手动加引号(不过WinSCP的lcd命令要求路径用双引号包裹,脚本里的""%~dp0"""是批处理中对双引号的转义写法,确保WinSCP能正确识别路径)。- 这个方案完全适配SharePoint同步文件夹的场景,不管不同用户的同步路径是
%USERPROFILE%\User-Path\FTP\还是%USERPROFILE%\UserPath-FTP\FTP,%~dp0都会自动指向脚本所在的那个FTP文件夹。
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

