2014-10-03 59 views
0

我在用WinSCP創建一個使用AutoIt的FTP傳輸腳本如何將AutoIt腳本中的用戶輸入傳遞給WinSCP?

我正在使用winscp.com。

我想從用戶(通過GUI)接受輸入,然後在我的WinSCP命令中使用這些輸入。

例如,我想根據用戶的選擇設置本地目錄。

當前情況:我可以存儲用戶的輸入,但是當我嘗試在使用AutoIt腳本的WinSCP命令控制檯中傳遞相同的輸入時,它不會讀取變量或者只是給出和未知的命令錯誤。

RunWait(@ComSpec & ' /k ' & 'winscp.com /command "option batch continue" ' & '"option confirm off" ' & ' "open xyz"' & ' "lcd" ' & $Dir) 

$Dir具有用於使用GUICtrlRead()存儲的用戶輸入的值。

請建議是否有任何其他方式讓WinSCP控制檯讀取我的用戶數據(我希望每次都由用戶捕獲唯一數據,因此不想創建配置文件)。

感謝

回答

1

雖然我不知道AutoIt的語法,我敢肯定你有報價錯誤。

雙引號必須圍繞整個lcd命令,包括它的論點。擴展的命令必須像"lcd /path/to/dir",而不是"lcd" /path/to/dir,因爲你現在擁有它。就像您使用open(即"open xyz")一樣。

此外,如果您需要在路徑中使用空格,則路徑本身必須用雙引號引起來。由於引用發生在命令行上(與腳本文件相反),雙引號具有其含義,因此必須通過將雙引號加倍(例如雙引號)來避免引號。得到的語法是"lcd ""/path/to/dir"""

所以,與其

... ' "lcd" ' & $Dir 

使用

... ' "lcd ""' & $Dir & '"""' 

參考文獻:
https://winscp.net/eng/docs/commandline#syntax
https://winscp.net/eng/docs/scripting#syntax

此外,我相信你並不真的需要常量字符串之間的所有這些串連,只需要:

RunWait(@ComSpec & ' /k winscp.com /command "option batch continue" "option confirm off" "open xyz" "lcd ""' & $Dir & '"""') 
+0

我把$ Dir從「lcd」引用到引號之外,因爲我需要用戶輸入存儲在變量中。而在Auto的情況下,如果我根據您的建議將它放在引號中,變量將被讀爲字符串而不是被讀爲可變字符 另外,因爲我需要使用多個變量,所以我打破了字符串未來的編碼。 (一旦我找到了這個問題的解決方案:D – 2014-10-03 14:06:26

+0

您是否嘗試過我的建議?雙引號與AutoIt無關,它們是WinSCP所需要的.WinSCP不會理解''lcd'/ path/to/dir',它需要''lcd/path/to/dir「'。單引號是AutoIt的語法,而'$ Dir'在我的例子中不在單引號之內 – 2014-10-03 14:31:25

+0

是的,我做了,謝謝!我的問題的一半。我現在可以使用變量'$ Dir',但是我必須像'$ Dir =「C:\」'手動定義它,然後命令成功運行。 但是,如果我將用戶輸入傳遞給我的變量,我得到一個錯誤** **太多的參數爲LCD **。 這就是我使用用於捕捉和傳遞用戶輸入 '$ locald = GuiCtrlCreateInput( 「本地目錄」,-1,10,130,20) \t GUICtrlSetPos($風向,145,40) $迪爾= GUICtrlRead($ locald)' 請指教,因爲我相信即時通過參數錯誤 – 2014-10-03 17:44:33

相關問題