Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Copy не принимает переменные (http://forum.oszone.net/showthread.php?t=286760)

Ultrix 20-08-2014 07:10 2391564

Copy не принимает переменные
 
Здравствуйте. Помогите, пожалуйста, разобраться с проблемой. Пишу скрипт, который должен запускаться раз в сутки и копировать файл на фтп-сервер в 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 2391567

Ultrix, без пробела:
Код:

set /p qwerty= <Name.txt
!

Ultrix 20-08-2014 08:01 2391569

Цитата:

Цитата Georgio
без пробела: »

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

Ultrix 20-08-2014 08:31 2391576

не хочу создавать еще одну тему, напишу здесь.
Дальше проблема в копировании на фтп.
батник:
Код:

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 2391580

Код:

login
pass
cd public
put d:\na_ftp\test.txt
disconnect
quit


Ultrix 20-08-2014 09:09 2391586

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 2391612

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

Ultrix 20-08-2014 11:27 2391646

Так и не победил я стандартную утилиту ftp, поюзал cURL, он нормально работает с пассивным режимом ФТП-сервера.
Код:

curl.exe -T d:\na_ftp\test.txt ftp://%имя_сервера%/public/ --user user:password
Всем спасибо за участие!

Iska 20-08-2014 17:45 2391869

Цитата:

Цитата Ultrix
Так и не победил я стандартную утилиту ftp, поюзал cURL, он нормально работает с пассивным режимом ФТП-сервера. »

Именно так.


Время: 09:50.

Время: 09:50.
© OSzone.net 2001-