You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过WinSCP实现远程文件移至本地或下载后删除远程源文件?

WinSCP脚本修改方案(两种需求实现)

你的两种需求都可以通过WinSCP脚本实现,以下是针对每种需求的修改后的完整脚本:


需求1:将远程路径的文件移动至本地路径

该方案通过get -delete命令实现,文件下载到本地后自动删除远程服务器上的对应文件,等同于“移动”操作:

@echo on
cls
:SetFileLogVariables
SET localdir=C:\Users\User1\Received
SET remotedir=\folder_1
SET logfile=C:\Users\Users1\Logs\Syncanddelete.log

:SetPrgVariables
SET prgwinscp=C:\Users\Users1\AppData\Local\Programs\WinSCP\WinSCP.com
SET winscplogin="SyncandDelete"
SET winscpfile=%temp%\~tmpWinSCPFTPSyncT_%~N0.txt
IF EXIST "%winscpfile%" DEL /Q /F "%winscpfile%"

:SetWinSCPSyncCommand
REM 移动远程文件到本地:下载成功后自动删除远程对应文件
SET ftpcmd=get -delete -binary "%remotedir%\*" "%localdir%\"
   
:ftpout
>>"%logfile%" ECHO.
>>"%logfile%" ECHO ***************************  FTP OUT ***************************
     >>"%logfile%" ECHO 移动远程文件到本地 %winscplogin% 服务器 on %date% at %time%

>>"%winscpfile%" ECHO option batch on
>>"%winscpfile%" ECHO option confirm off
>>"%winscpfile%" ECHO option transfer binary
>>"%winscpfile%" ECHO open %winscplogin%
>>"%winscpfile%" ECHO cd "%remotedir%"
>>"%winscpfile%" ECHO %ftpcmd%
>>"%winscpfile%" ECHO close
>>"%winscpfile%" ECHO exit

>>"%logfile%" ECHO %winscpfile%                                
TYPE "%winscpfile%" >> %logfile%
>>"%logfile%" ECHO ------------------------------------------ 
"%prgwinscp%" /script="%winscpfile%" >>"%logfile%" 2>&1
>>"%logfile%" ECHO ------------------------------------------
IF EXIST "%winscpfile%" DEL /Q /F "%winscpfile%"
>>"%logfile%" ECHO 传输完成 on %date% at %time%

ping -n 2 -w 1000 127.0.0.1 > nul

关键修改点:

  • 将原synchronize命令替换为get -delete -binary "%remotedir%\*" "%localdir%\"
  • 日志中同步操作描述改为“移动远程文件到本地”

需求2:复制远程文件到本地后,仅删除已下载的远程文件

该需求和“移动”的最终效果一致,但如果需要明确先完成复制再删除(不推荐,存在下载失败后误删风险),可以采用分两步执行的方式;更可靠的方式还是使用get -delete(仅在下载成功后删除远程文件)。以下给出两种实现:

方式1:可靠实现(同需求1的脚本)

直接使用get -delete,确保只有下载成功的文件才会被删除,避免数据丢失风险,脚本同需求1。

方式2:分步执行(先复制再删除)

@echo on
cls
:SetFileLogVariables
SET localdir=C:\Users\User1\Received
SET remotedir=\folder_1
SET logfile=C:\Users\Users1\Logs\Syncanddelete.log

:SetPrgVariables
SET prgwinscp=C:\Users\Users1\AppData\Local\Programs\WinSCP\WinSCP.com
SET winscplogin="SyncandDelete"
SET winscpfile=%temp%\~tmpWinSCPFTPSyncT_%~N0.txt
IF EXIST "%winscpfile%" DEL /Q /F "%winscpfile%"

:SetWinSCPSyncCommand
REM 先复制远程文件到本地,再删除远程文件
SET ftpcmd_get=get -binary "%remotedir%\*" "%localdir%\"
SET ftpcmd_rm=rm "%remotedir%\*"
   
:ftpout
>>"%logfile%" ECHO.
>>"%logfile%" ECHO ***************************  FTP OUT ***************************
     >>"%logfile%" ECHO 复制并删除远程文件 on %winscplogin% 服务器 on %date% at %time%

>>"%winscpfile%" ECHO option batch on
>>"%winscpfile%" ECHO option confirm off
>>"%winscpfile%" ECHO option transfer binary
>>"%winscpfile%" ECHO open %winscplogin%
>>"%winscpfile%" ECHO cd "%remotedir%"
>>"%winscpfile%" ECHO %ftpcmd_get%
>>"%winscpfile%" ECHO %ftpcmd_rm%
>>"%winscpfile%" ECHO close
>>"%winscpfile%" ECHO exit

>>"%logfile%" ECHO %winscpfile%                                
TYPE "%winscpfile%" >> %logfile%
>>"%logfile%" ECHO ------------------------------------------ 
"%prgwinscp%" /script="%winscpfile%" >>"%logfile%" 2>&1
>>"%logfile%" ECHO ------------------------------------------
IF EXIST "%winscpfile%" DEL /Q /F "%winscpfile%"
>>"%logfile%" ECHO 传输完成 on %date% at %time%

ping -n 2 -w 1000 127.0.0.1 > nul

注意:分步执行方式存在风险,如果下载过程中出现错误(如网络中断),已经执行的rm命令可能会删除未成功下载的远程文件,因此优先推荐使用方式1。


内容的提问来源于stack exchange,提问作者ecuso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 22:09:24