4

У меня есть скрипт .bat с командами ftp (все в одном), похожими на этот. См. П. 5:FTP - разрешение переменных среды - создание сценария FTP на лету во время выполнения и использование переменных в сценарии FTP

Когда я запускаю .bat из командной строки, все работает хорошо. Файлы переносятся (в моем случае) с сервера на мой компьютер.

Однако, когда я запускаю тот же файл .bat двойным щелчком, он больше не интерпретирует скрипт ftp правильно.

Все остальные .bat файлы, кажется, работают одинаково, если они дважды щелкнуты или вызваны из командной строки. Это не будет работать здесь? Если так, то почему бы и нет?

РЕДАКТИРОВАТЬ:
Кажется, проблема в том, когда он достигает первой команды ftp, которая использует переменную.
Например, он откроется и подключится нормально, но тогда моя следующая команда - get с переменной для имени файла. Кажется, он не может прочитать имя переменной и просто вызывает get. Тем не менее, я не вижу этой проблемы, когда я вызываю bat из строки cmd ....

РЕДАКТИРОВАТЬ
Проблема исправлена, см. Мой ответ ниже.

Благодарю вас.

3 ответа3

2

Это очень сложно, не зная, как происходит сбой скрипта.

Основным различием между запуском из окна командной строки и двойным щелчком будет рабочий каталог.

Вы не можете изменить это в обычных пакетных файлах, но вы можете создать ярлык для пакетного файла и изменить там каталог Start in: .

альтернативный текст

1

Я полагаю, что ваш текущий каталог установлен неправильно при двойном щелчке по файлу .bat, и именно поэтому он не находит скрипт FTP.

Попробуйте добавить echo %CD% в пакетный файл и посмотрите, что он печатает в каждом случае.

1

ОТВЕТ:
Мои переменные были объявлены перед циклом for, который сохраняет команды ftp во временном файле, а затем заменяет переменные значениями. Таким образом, на тот момент не было переменных, которые могли бы заменить переменные, используемые в сценарии ftp.

Похоже, он работал из командной строки, потому что, как только я позвонил в первый раз, он, вероятно, допустил ошибку, но если я вызвал его снова, не закрывая консоль, переменные теперь сохранялись в памяти. Оттуда это тогда выглядело так, как будто оно всегда работало с консоли.

Как только они были сохранены в памяти, не имело значения, что цикл for был перед переменными. Переменные теперь сохранялись в памяти после первого открытия.

При двойном щелчке он открывался для первого сеанса каждый раз, а переменные удалялись в памяти после его автоматического закрытия. Так что в этом случае он открывался и закрывался, каждый раз, когда я дважды щелкал по нему.

Главным отличием здесь было открытие первого сеанса вместо повторного вызова в той же консоли без закрытия. Вызывая его в первый раз, переменные будут сохранены ДО ДО того, как сценарий ftp уже был создан.

Пожалуйста, не стесняйтесь редактировать это, если вы можете сделать это яснее ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .