PDA

Показать полную графическую версию : [решено] Copy не принимает переменные


Ultrix
20-08-2014, 07:10
Здравствуйте. Помогите, пожалуйста, разобраться с проблемой. Пишу скрипт, который должен запускаться раз в сутки и копировать файл на фтп-сервер в 2 разные папки под двумя разными именами. Этот файл обновляется и каждый раз у него разное имя. По идее проблема не большая, но я столкнулся с небольшой проблемой. Вот часть скрипта:

dir /b *.txt > Name.txt
set /p qwerty = <Name.txt

rem проверка содержимого переменной
set qwerty

copy "d:\na_ftp\%qwerty%" test.txt

в папке со скриптом (d:\na_ftp\) есть файл 1.txt, имя которого по первой строке скрипта валится в файл, а вторая строка задает из этого файла значение переменной, равное имени этого файла. собственно, последняя строка копирует файл в эту же папку с переименованием.
Так вот проблема заключается в том, что значение переменной не подставляется в параметры команды copy. Почему то подставляется пустое значение:

D:\na_ftp>output.bat
D:\na_ftp>dir /b *.txt 1>Name.txt
D:\na_ftp>set /p qwerty = 0<Name.txt
D:\na_ftp>set qwerty
qwerty =1.txt
D:\na_ftp>copy "d:\na_ftp\" test.txt
Не удается найти указанный файл.

даже если так: copy "%qwerty%" test.txt, то:

D:\na_ftp>copy "" test.txt
Системе не удается найти указанный путь.

Видно, что перемеренная получает правильное имя файла, а подставляется пустое значение. Подскажите, пожалуйста, так и должно быть? Если да, то как по-другому это реализовать?
PS даже если значение переменной задать вручную, то он ее все равно не подставляет

Georgio
20-08-2014, 07:54
Ultrix, без пробела: set /p qwerty= <Name.txt!

Ultrix
20-08-2014, 08:01
без пробела: »

И чем я только думал, АГРРРХ на меня!! внимательность решает! Спасибо огромнейшее! =)

Ultrix
20-08-2014, 08:31
не хочу создавать еще одну тему, напишу здесь.
Дальше проблема в копировании на фтп.
батник:
dir /b *.txt >Name.txt
set /p qwerty= <Name.txt
set qwerty
copy "%qwerty%" test.txt
ftp -s:ftp.txt -i %имя сервера%
del test.txt
ftp.txt:
login
pass
cd public
mput d:\na_ftp\test.txt
quit

копирование на фтп проходит, файл там появляется, но дальше скрипт останавливается:
D:\na_ftp>ftp -s:ftp.txt -i %имя сервера%
Связь с %имя сервера%.
220-TwoFTPd server ready.
220 Authenticate first.
Пользователь (%имя сервера%:(none)):
331 Send PASS.

230 Ready to transfer files.
ftp> cd public
250 Changed directory.
ftp> mput d:\na_ftp\test.txt
200 PORT command successful
Чего он ждет? не дополнительной же команды на завершение копирования? Если ждать минут 10, то:
425 Connection failed: Connection timed out
ftp> quit
221 Bye.

D:\na_ftp>del test.txt
Как бы этого достаточно, скрипт делает то, что должен, но напрягает, что он отконнекчивается от фтп по истечении времени ожидания, а не по команде quit. Может после mput d:\na_ftp\test.txt еще что-то надо добавить?
И попутно еще вопрос: будет ли mput по-умолчанию заменять существующий файл с таким же именем на ФТП-сервере? если нет, то какой параметр еще указать надо?

Georgio
20-08-2014, 08:51
login
pass
cd public
put d:\na_ftp\test.txt
disconnect
quit

Ultrix
20-08-2014, 09:09
Cпасибо, про дисконнект не знал.
Но все равно не работает.
230 Ready to transfer files.
ftp> cd public
250 Changed directory.
ftp> put d:\na_ftp\test.txt
200 PORT command successful
425 Connection failed: Connection timed out
ftp> disconnect
221 Bye.
ftp> quit
Если во время ожидания ctrl+c нажать, то ожидание включается после команды дисконнект
230 Ready to transfer files.
ftp> cd public
250 Changed directory.
ftp> put d:\na_ftp\test.txt
200 PORT command successful
Разрыв любых активных подключений...
ftp> disconnect
ftp> quit
Завершить выполнение пакетного файла [Y(да)/N(нет)]?
Но это ожидание немного меньше.
Попробовал вместо disconnect команду close - тоже не помогает.

Ultrix
20-08-2014, 10:24
Еще мысль появилась. Может ли такое происходить от того, что фтп-сервер в пассивном режиме? как с таким режимом из cmd работать?
PS только что заметил, что файл, который создается при этом на ФТП-сервере - пустой (0 байт)

Ultrix
20-08-2014, 11:27
Так и не победил я стандартную утилиту ftp, поюзал cURL, он нормально работает с пассивным режимом ФТП-сервера.
curl.exe -T d:\na_ftp\test.txt ftp://%имя_сервера%/public/ --user user:password
Всем спасибо за участие!

Iska
20-08-2014, 17:45
Так и не победил я стандартную утилиту ftp, поюзал cURL, он нормально работает с пассивным режимом ФТП-сервера. »
Именно так.




© OSzone.net 2001-2012