2015-05-14 279 views
2

我試圖從sftp軟件倉庫中自動上傳/下載。密碼輸入到sftp命令中。我想批處理執行如下:在sftp命令中傳入參數作爲參數的批處理文件

batch1.bat

@ECHO OFF 
SET usernameHost=%1 
SET password=%2 
SET inputLoc=%3 
SET outputLoc=%4 

(echo %2) | sftp -b (batch2.bat %3 %4) %1 

一個batch2.bat將有一個PUT/GET命令所以它需要的inputLocoutputLoc參數。不幸的是,括號不適用,所以我不知道如何通過batch2.bat任何參數,而不會混淆該行中的sftp命令。

有誰知道如何做到這一點,或可以建議一個替代?

這裏是sftp命令文檔:http://linux.die.net/man/1/sftp

我使用Windows與GOW工具在cmd擴展。

+0

FTP通常可以採用自己的命令。 batch2.bat是做什麼的?向我們展示該代碼。 – SomethingDark

回答

1

我假設batch2.bat產生一個sftp腳本(put等),對不對?因此,您希望將其輸出存儲到臨時文件(命名管道),並將其名稱用作sftp -b的參數。

即使在* nix上,你的語法也是錯誤的。它應該是:

sftp -b <(batch2.bat %3 %4) %1 

注意<


無論如何,這個(進程替代)在Windows上是不可能的。

你必須使用一個臨時文件:

call batch2.bat %3 %4 > sftp.txt 
echo %2 | sftp -b sftp.txt %1 
del sftp.txt 

但需要注意的是,在Gow(爲0.8.0版本)的sftp只是一個別名過時psftp(0.63版本)。

牌九中的sftp是一個批處理文件,它看起來像:

@echo off 
psftp %1 %2 %3 %4 %5 %6 %7 %8 %9 

您應該使用official up-to-date release of the psftp代替。

此外psftp無法從重定向輸入中讀取密碼(* nix sftp也不能)。

可以使用-pw開關來代替:

psftp -b sftp.txt -pw %2 %1 

(請注意,* nix的sftp沒有-pw開關)


或者使用Windows命令行SFTP客戶端可以在命令行上執行命令,以避免您嘗試使用的所有黑客行爲。

例如與WinSCP

@ECHO OFF 
SET inputLoc=%3 
SET outputLoc=%4 

winscp.com /command^
    "open sftp://user:[email protected]/"^
    "put ""%inputLoc%"" ""%outputLoc%"""^
    "exit" 

(請注意,在WinSCP賦予你在session URL的用戶名和主機名一起指定密碼,所以我不能直接使用當前的%1%2參數)

對於介紹的WinSCP腳本,請參見:
https://winscp.net/eng/docs/guide_automation

(我的WinSCP的作者)


需要注意的是不論,你到底是什麼客戶端使用起來,你必須與主機密鑰驗證某種方式處理。

看如何verify the host key in WinSCP script

相關問題