簡體   English   中英

Windows 批處理腳本到 SFTP 文件到遠程位置,然后在完成后將它們向上移動一個目錄

[英]Windows Batch script to SFTP files to remote location and then move them up a directory once finished

我有一個問題,我上傳給供應商的文件在上傳完成之前就被消耗掉了。 為了解決這個問題,供應商為我提供了一個位置,我可以先在該位置上傳文件,然后要求我在上傳完成后移動它們。

去除敏感信息,我在我的 sftp 命令中批量引用這個文件 myfile.scr

cd /from_client/payments/upload
lcd E:/uploadfiles
mput uploadfiles.xml.*
quit

這會將文件上傳到遠程目錄上傳。 我知道需要讓他們進入上述級別。 理論上,這將正常處理,並且文件已經存在,因此應用程序在完成上傳之前不會使用它們。

我假設我需要做一項工作來構建文件列表,然后第二次循環遍歷它們以對遠程文件夾進行重命名,以使它們更上一層樓。

關於這如何工作的任何想法? 供應商在這里無能為力。

已經嘗試了各種解決方案,看看我是否可以使用 mv 但這不是一個選項,因為它不使用 Winscp。 我們只能使用批處理腳本,然后使用本機 sftp 命令。

您可以使用這樣的批處理文件為每個文件生成putrename命令:

set SOURCE=E:\uploadfiles
set SCRIPT=myfile.scr

(
  echo cd /from_client/payments/upload
  echo lcd %SOURCE%
  for %%F in (%SOURCE%\*) do (
    echo put %%~nF
    echo rename %%~nF /final/path/%%~nF
  )
  echo quit
) > %SCRIPT%

sftp user@host -b %SCRIPT%

它應該生成這樣的腳本:

cd /from_client/payments/upload
lcd E:\uploadfiles
put one.txt
rename one.txt /final/path/one.txt
put two.txt
rename two.txt /final/path/two.txt
put three.txt
rename three.txt /final/path/three.txt
quit

雖然有一個更有能力的客戶,但它會更容易。 例如,我的WinSCP支持帶有mv命令的通配符,因此您可以簡單地執行以下操作:

WinSCP.com /ini=nul /log=winscp.log /command ^
    "open sftp://user:password@host/ -hostkey=""...""" ^
    "put E:\uploadfiles\* /from_client/payments/upload/" ^
    "mv /from_client/payments/upload/* /final/path/" ^
    "exit"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM