2014-10-03 2 views
0

Я пытаюсь создать скрипт FTP-передачи с помощью AutoIt с WinSCPКак передать пользовательский ввод в скрипт AutoIt для WinSCP?

Я использую winscp.com.

Я хочу взять данные от пользователя (через графический интерфейс), а затем использовать эти входы в моих командах для WinSCP.

Например, я хочу установить локальный каталог по выбору пользователя.

Текущая ситуация: я могу хранить вход пользователя, однако, когда я пытаюсь передать его в командной консоли WinSCP с помощью скрипта AutoIt, он либо не читает переменную, либо просто дает и не знает ошибку команды.

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 это, если я заключу его в кавычки в соответствии с вашим предложением, переменная будет считана как строка вместо того, чтобы читать как varaible Также, поскольку мне нужно использовать несколько переменных, я разбил строку для будущее кодирование. (как только я нахожу решение этой проблемы: D –

+0

Вы попробовали мое предложение вообще? Двойные кавычки не имеют ничего общего с AutoIt, они нужны WinSCP. WinSCP не поймет '' lcd '/ path/to/dir', он нуждается в '' lcd/path/to/dir''. Одиночные кавычки - это синтаксис AutoIt, а '$ Dir' находится за пределами одного кавычки в моем примере. –

+0

Да, я сделал, спасибо! половина моей проблемы.Я могу теперь использовать varaible '$ Dir', однако мне нужно вручную определить его как' $ Dir = "C: \" ', а затем команда запускается успешно. Однако, если я передаю пользовательский ввод в свою переменную, я получаю ошибку как ** слишком много параметров для lcd **. Это то, что я использовать для захвата и передачи пользовательского ввода '$ locald = GuiCtrlCreateInput ("Местное Dir", -1, 10, 130, 20) \t GUICtrlSetPos ($ Dir, 145,40) $ = Dir GUICtrlRead ($ locald) ' Пожалуйста, сообщите мне, что я передаю параметры как-то –