Побег персонажей в пакетных скриптах - PullRequest
3 голосов
/ 04 октября 2010

У меня есть следующий скрипт для автоматизации загрузки файла на удаленный сервер.Проблема в том, что пароль, который мне дали, полон специальных символов, которые убивают процесс входа в систему.

Вот измененная версия символов:

j7 ~]%& X

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

Что может быть не так или как мне узнать пароль до его отправки?

:Source = http://www.howtogeek.com/howto/windows/how-to-automate-ftp-uploads-from-the-windows-command-line/

@echo off
echo user myloginname> ftpcmd.dat
echo mypassword>> ftpcmd.dat
echo bin>> ftpcmd.dat
echo put %1>> ftpcmd.dat
echo quit>> ftpcmd.dat
ftp -n -s:ftpcmd.dat myserver
del ftpcmd.dat

РЕШЕНИЕ

Как упоминалось ниже, я использовал команду "type", чтобы увидеть, что на самом деле было в ftpcmd.dat.Получается, что через много проб и ошибок на экранирующих символах вы используете разные escape-символы для разных специальных символов !!!

Для амперсанда используйте каретку, а для процента -процент.Итак, учитывая мой пароль:

j7 ~]% & X

, полученный пароль будет:

j7 ~] %% ^ & X

Ответы [ 3 ]

4 голосов
/ 04 октября 2010

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

Но лучше использовать отложенное расширение, потому что тогда специальные символы теряют свое "специальное" поведение, даже знаки переноса и знаки процента.

@echo off
setlocal EnableDelayedExpansion
set /p passwd=Enter pwd
echo user myloginname> ftpcmd.dat
echo mypassword>> ftpcmd.dat
echo bin>> ftpcmd.dat
echo put !passwd! >> ftpcmd.dat
echo quit>> ftpcmd.dat
type ftpcmd.dat
ftp -n -s:ftpcmd.dat myserver

Вторая проблема - команда ftp, где символы также должны быть экранированы.Возможно (как написала Вики) обратный слеш мог бы сработать.Вы можете поместить его перед каждым отдельным символом, используя цикл for

1 голос
/ 17 августа 2011

К вашему сведению, префикс символов выполняется с помощью ^. Поэтому, если вы выполняли echo с > в строке, но записывали файл, он не сможет выйти. Синтаксис будет:

echo ^<html^> >> foo.txt
1 голос
/ 04 октября 2010

FTP-пароли отправляются в виде простого текста, поэтому установка чего-то вроде Wireshark позволит вам увидеть, что отправляется.

Я ожидаю, что вам понадобится поставить перед специальными символами обратную косую черту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...