Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/12: Рейтинг темы: голосов - 12, средняя оценка - 4.58
Roman1978
1 / 1 / 0
Регистрация: 24.02.2014
Сообщений: 18
1

Перенести случайный txt-файл с FTP-сервера на локальный компьютер

01.03.2014, 03:35. Просмотров 2361. Ответов 17
Метки нет (Все метки)

На ftp сервере лежат файлы от 1.txt до 1000.txt как с помощью командной строки перенести случайный файл на локальный компьютер . С ftp файл надо убрать.
Заранее благодарен за помощь.

Добавлено через 35 минут
Наверное я немного неправильно поставил задачу. Я не знаю как называются файлы и какое их количество знаю что они имеют расширение txt. Нужно перенести случайный файл на локальный компьютер.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2014, 03:35
Ответы с готовыми решениями:

Копирование файла с FTP-сервера на локальный диск
Помогите, пожалуйста, с батником для копирования с fpt на лок диск текстового файла! Добавлено...

Копирование папки с FTP-сервера на локальный диск
Всем доброго времени суток. Кто знает как можно скопировать папку с Ftp на лок диск? (Желательно...

Удалить с FTP-сервера все файлы, которые были скачаны на локальный сервер
Здравствуйте, облазил весь Интернет не нашел подходящего решения. Суть задачи. Есть ftp, с...

Скачивание файлов с FTP сервера на локальный ЖД
Здравствуйте. Возникла проблема, возможно глупая и её решение должно быть элементарным, но всё же...

Копирование (зеркалирование) FTP-сервера на локальный диск компьютера
Копирование (зеркалирование) FTP-сервера на локальный диск компьютера (в какой-то отдельный каталог...

17
Dragokas
Эксперт WindowsАвтор FAQ
17112 / 7167 / 863
Регистрация: 25.12.2011
Сообщений: 10,964
Записей в блоге: 16
01.03.2014, 15:57 2
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
set server=адрес FTP
set port=21
set user=Имя пользователя
set pass=Ваш пароль
set root=каталог, из которого копировать файл
set mask=txt
set dest=папка, куда переносить файл на локальном ПК
 
set tempfile=путь + имя временного файла с командами FTP (указать любое)
 
cd /d "%~dp0"
call :GenerateComm1 "%tempfile%"
ftp -i -s:"%tempfile%"
del /F "%tempfile%"
 
For /F "delims=" %%a in (list.log) do set /A n+=1& set file.!n!=%%a
 
set /a i=%random%%%%n%+1
set file=!file.%i%!
 
call :GenerateComm2 "%tempfile%" "%file%"
ftp -i -s:"%tempfile%"
del /F "%tempfile%"
 
pause
Exit /B
 
:GenerateComm1
  (
    echo open %server% %port%
    echo %user%
    echo %pass%
    echo prompt
    echo mls "%root%" list.log
    echo disconnect
    echo bye
  ) > "%~1"
Exit /B
 
:GenerateComm2
  (
    echo open %server% %port%
    echo %user%
    echo %pass%
    echo cd "%root%"
    echo lcd "%dest%"
    echo binary
    echo hash
    echo quote PASV
    echo get "%~2"
    echo delete "%~2"
    echo disconnect
    echo bye
  ) > "%~1"
Exit /B
1
Roman1978
1 / 1 / 0
Регистрация: 24.02.2014
Сообщений: 18
01.03.2014, 16:02  [ТС] 3
Огромное спасибо.
0
Roman1978
1 / 1 / 0
Регистрация: 24.02.2014
Сообщений: 18
01.04.2014, 00:05  [ТС] 4
Не работает матерится на list.txt файл не скопировало с ftp не удалило



Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
D:\>copy.cmd
 
D:\>SetLocal EnableExtensions EnableDelayedExpansion
 
D:\>set server=ftp.000space.com
 
D:\>set port=21
 
D:\>set user=********
 
D:\>set pass=*********
 
D:\>set root=/********.000space.com/htdocs/
 
D:\>set mask=txt
 
D:\>set dest=d:\
 
D:\>set tempfile=tmptmp
 
D:\>cd /d "D:\"
 
D:\>call :GenerateComm1 "tmptmp"
 
D:\>(
echo open ftp.000space.com 21
 echo space_*******
 echo *******
 echo prompt
 echo mls "/********.000space.com/htdocs/" list.log
 echo disconnect
 echo bye
) 1>"tmptmp"
 
D:\>Exit /B
 
D:\>ftp -i -s:"tmptmp"
 
ВНИМАНИЕ! Команда успешно выполнена.
Тем не менее команда "netsh firewall" устарела,
вместо нее следует использовать "netsh advfirewall firewall".
Дополнительные сведения об использовании команд "netsh advfirewall firewall"
вместо "netsh firewall" см. в статье базы знаний 947709
на веб-сайте [url]http://go.microsoft.com/fwlink/?linkid=121488[/url] .
 
ОК.
 
ftp> open ftp.000space.com 21
Связь с ftp.000space.com.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 321 of 1900 allowed.
220-Local time is now 23:55. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 60 seconds of inactivity.
Пользователь (ftp.000space.com:(none)):
331 User space_******** OK. Password required
 
230 OK. Current restricted directory is /
ftp> cd "**********.000space.com/htdocs/"
250 OK. Current directory is /********.000space.com/htdocs
ftp> get "list.txt" "C:\Users\user\AppData\Local\Temp\list.txt"
200 PORT command successful
150 Connecting to port 13783
226-File successfully transferred
226 0.000 seconds (measured here), 292.57 Kbytes per second
ftp: 9 байт получено за 0.00 (сек) со скоростью 9000.00 (КБ/сек).
ftp> disconnect
221-Goodbye. You uploaded 0 and downloaded 1 kbytes.
221 Logout.
ftp> bye
Їрщы list.txt ёє∙хёЄтєхЄ эр FTP-ёхЁтхЁх.Yes
 
D:\>
0
01.04.2014, 00:05
Eva Rosalene
Ladybug
4131 / 1603 / 306
Регистрация: 06.01.2013
Сообщений: 4,195
Завершенные тесты: 2
01.04.2014, 09:25 5
Не называйте свой файл copy.cmd - в рекурсию уйдете а нам вытаскивать.
2
Roman1978
1 / 1 / 0
Регистрация: 24.02.2014
Сообщений: 18
01.04.2014, 23:41  [ТС] 6
В рекурсию не ушел )). Но изменение имени никаких результатов не принесло

Добавлено через 8 часов 33 минуты
Будут ли какие то рекомендации по правке скрипта или искать другие методы?
Заранее спасибо за ответ.
0
Dragokas
Эксперт WindowsАвтор FAQ
17112 / 7167 / 863
Регистрация: 25.12.2011
Сообщений: 10,964
Записей в блоге: 16
03.04.2014, 22:05 7
Откуда вообще взялась эта команда? В моем скрипте такого нет. Там list.log.

Цитата Сообщение от Roman1978 Посмотреть сообщение
get "list.txt" "C:\Users\user\AppData\Local\Temp\list.txt"
1
Roman1978
1 / 1 / 0
Регистрация: 24.02.2014
Сообщений: 18
03.04.2014, 23:15  [ТС] 8
Нету там list.txt проверял какой то глюк моей винды проверял по rdp на двух других машинах получил другой результат файл также не скачало и не удалило но выдало такое
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.
 
C:\Windows\system32>d:
 
D:\>cmd
Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.
 
D:\>c
 
D:\>SetLocal EnableExtensions EnableDelayedExpansion
 
D:\>set server=ftp.000space.com
 
D:\>set port=21
 
D:\>set user=********
 
D:\>set pass=********
 
D:\>set root=*********000space.com/htdocs/
 
D:\>set mask=txt
 
D:\>set dest=d:\
 
D:\>set tempfile=tmptmp
 
D:\>cd /d "D:\"
 
D:\>call :GenerateComm1 "tmptmp"
 
D:\>(
echo open ftp.000space.com 21
 echo *********
 echo *********
 echo prompt
 echo mls "*********000space.com/htdocs/" list.log
 echo disconnect
 echo bye
) 1>"tmptmp"
 
D:\>Exit /B
 
D:\>ftp -i -s:"tmptmp"
ftp> open ftp.000space.com 21
Связь с ftp.000space.com.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 421 of 1900 allowed.
220-Local time is now 22:57. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 60 seconds of inactivity.
Пользователь (ftp.000space.com:(none)):
331 User ********** OK. Password required
 
230 OK. Current restricted directory is /
ftp> prompt
Интерактивный режим Вкл.
ftp> mls "*********000space.com/htdocs/" list.log
output to local-file: list.log? disconnect
ftp> bye
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout.
 
D:\>del /F "tmptmp"
 
D:\>For /F "delims=" %a in (list.log) do set /A n+=1  & set file.!n!=%a
Не удается найти файл list.log.
 
D:\>set /a i=30685%+1
 
D:\>set file=!file.0!
 
D:\>call :GenerateComm2 "tmptmp" ""
 
D:\>(
echo open ftp.000space.com 21
 echo ************
 echo ************
 echo cd "/********.000space.com/htdocs/"
 echo lcd "d:\"
 echo binary
 echo hash
 echo quote PASV
 echo get ""
 echo delete ""
 echo disconnect
 echo bye
) 1>"tmptmp"
 
D:\>Exit /B
 
D:\>ftp -i -s:"tmptmp"
ftp> open ftp.000space.com 21
Связь с ftp.000space.com.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 422 of 1900 allowed.
220-Local time is now 22:57. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 60 seconds of inactivity.
Пользователь (ftp.000space.com:(none)):
331 User *********** OK. Password required
 
230 OK. Current restricted directory is /
ftp> cd "*********.000space.com/htdocs/"
250 OK. Current directory is /**********.000space.com/htdocs
ftp> lcd "d:\"
Текущий локальный каталог D:\.
ftp> binary
200 TYPE is now 8-bit binary
ftp> hash
Вывод метки хеширования Вклftp: (2048 байт/хеш-метка).
ftp> quote PASV
227 Entering Passive Mode (185,27,134,11,134,180)
ftp> get ""
Удаленный файл delete ""
Удаленный файл get [ локальный-файл ].
ftp> disconnect
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout.
ftp> bye
 
D:\>del /F "tmptmp"
 
D:\>pause
Для продолжения нажмите любую клавишу . . .
 
D:\>Exit /B
 
D:\>
0
Dragokas
Эксперт WindowsАвтор FAQ
17112 / 7167 / 863
Регистрация: 25.12.2011
Сообщений: 10,964
Записей в блоге: 16
03.04.2014, 23:24 9
Удалите строку 35 кода.
1
Roman1978
1 / 1 / 0
Регистрация: 24.02.2014
Сообщений: 18
03.04.2014, 23:44  [ТС] 10
Я правильно понял удалить echo prompt? Если да то вот такой результат
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Microsoft Windows [Version 6.2.9200]
(c) Корпорация Майкрософт, 2012. Все права защищены.
 
C:\Users\Администратор>d:
 
D:\>c
ftp> open ftp.000space.com 21
Связь с ftp.000space.com.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 439 of 1900 allowed.
220-Local time is now 23:36. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 60 seconds of inactivity.
Пользователь (ftp.000space.com:(none)):
331 User ************ OK. Password required
 
230 OK. Current restricted directory is /
ftp> mls "/********.000space.com/htdocs/" list.log
500 I won't open a connection to 192.168.1.155 (only to 193.93.216.70)
425 No data connection
ftp> disconnect
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout.
ftp> bye
Не удается найти файл list.log.
ftp> open ftp.000space.com 21
Связь с ftp.000space.com.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 439 of 1900 allowed.
220-Local time is now 23:36. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 60 seconds of inactivity.
Пользователь (ftp.000space.com:(none)):
331 User ********* OK. Password required
 
230 OK. Current restricted directory is /
ftp> cd "/************.000space.com/htdocs/"
250 OK. Current directory is /**********.000space.com/htdocs
ftp> lcd "d:\"
Текущий локальный каталог D:\.
ftp> binary
200 TYPE is now 8-bit binary
ftp> hash
Вывод метки хеширования Вклftp: (2048 байт/хеш-метка).
ftp> quote PASV
227 Entering Passive Mode (185,27,134,11,101,173)
ftp> get ""
Удаленный файл delete ""
Удаленный файл get [ локальный-файл ].
ftp> disconnect
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout.
ftp> bye
Для продолжения нажмите любую клавишу . . .
 
D:\>
Файл не перенесло
0
Dragokas
Эксперт WindowsАвтор FAQ
17112 / 7167 / 863
Регистрация: 25.12.2011
Сообщений: 10,964
Записей в блоге: 16
03.04.2014, 23:47 11
Цитата Сообщение от Roman1978 Посмотреть сообщение
ftp> mls "/********.000space.com/htdocs/" list.log
500 I won't open a connection to 192.168.1.155 (only to 193.93.216.70)
425 No data connection
На этот раз при подключении возникла ошибка.
Попробуйте запустить еще раз.
1
Roman1978
1 / 1 / 0
Регистрация: 24.02.2014
Сообщений: 18
04.04.2014, 00:04  [ТС] 12
Тот же результат я погуглил ошибки 500 и 425 народ пишет что это както связано с пассивным режимом передачи
0
Dragokas
Эксперт WindowsАвтор FAQ
17112 / 7167 / 863
Регистрация: 25.12.2011
Сообщений: 10,964
Записей в блоге: 16
04.04.2014, 00:07 13
Он в первом случае не используется.
Но можно попробовать. Продублируйте строку 51 где-то в строку 35.

Дело в том, что для каждого сервера по-разному работает эта штатная утилита FTP.
Некоторые вообще не поддерживают.
Надежный код можно построить только на компилируемом языке.
1
Roman1978
1 / 1 / 0
Регистрация: 24.02.2014
Сообщений: 18
05.04.2014, 00:12  [ТС] 14
На данный момент спасибо за помощь завтра попробую на каком то другом хостинге ftp сервер. Может действительно проблема там.

Добавлено через 16 минут
Лед тронулся видимо на данном ftp эсть ограничение по количеству подключений с одного ip за определенное время с другого ip прошло. Правда работает не совсем так как надо. В файл list.log попадают все файлы и папки которые находятся внутри указанной папки htdocks а не только файлы с расширением txt .Но это не проблема. Еще раз огромное спасибо.

Добавлено через 23 часа 31 минуту
Я прошу прощения но нужна еще помощь. Файл list выглядит вот так
.
..
1.txt
2.txt
получается ситуация когда чем меньше файлов тем больше вероятность того что скрипт пытается перенести файл с названием . или .. можно как то убрать дерево директорий из файла list
1
Dragokas
Эксперт WindowsАвтор FAQ
17112 / 7167 / 863
Регистрация: 25.12.2011
Сообщений: 10,964
Записей в блоге: 16
05.04.2014, 02:24 15
Замените строку 18 на эту:

Bash
1
For /F "delims=" %%a in (list.log) do if "%%a" neq "." if "%%a" neq ".." set /A n+=1& set "file.!n!=%%a"
1
Roman1978
1 / 1 / 0
Регистрация: 24.02.2014
Сообщений: 18
05.04.2014, 21:25  [ТС] 16
Тот же результат
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
ftp> open ftp.000space.com 21
Связь с ftp.000space.com.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 328 of 1900 allowed.
220-Local time is now 21:19. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 60 seconds of inactivity.
Пользователь (ftp.000space.com:(none)):
331 User ********* OK. Password required
 
230 OK. Current restricted directory is /
ftp> mls "/***********.com/htdocs/txt/" list.log
200 PORT command successful
150 Connecting to port 17886
226-Options: -a
226 2 matches total
ftp: 7 байт получено за 0.00 (сек) со скоростью 7.00 (КБ/сек).
ftp> disconnect
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout.
ftp> bye
ftp> open ftp.000space.com 21
Связь с ftp.000space.com.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 317 of 1900 allowed.
220-Local time is now 21:19. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 60 seconds of inactivity.
Пользователь (ftp.000space.com:(none)):
331 User **********OK. Password required
 
230 OK. Current restricted directory is /
ftp> cd "/*********.000space.com/htdocs/txt/"
250 OK. Current directory is /**********.000space.com/htdocs/txt
ftp> lcd "d:\"
Текущий локальный каталог D:\.
ftp> binary
200 TYPE is now 8-bit binary
ftp> hash
Вывод метки хеширования Вклftp: (2048 байт/хеш-метка).
ftp> quote PASV
227 Entering Passive Mode (185,27,134,11,135,109)
ftp> get ".."
200 PORT command successful
Ошибка при открытии локального файла ..
> .:═хшчтхёЄэ√щ ъюф ю°шсъш
ftp> delete ".."
550 Could not delete ..: Invalid argument
ftp> disconnect
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout.
ftp> bye
Для продолжения нажмите любую клавишу . . .
ftp> get ".."
ftp> delete ".."
0
Dragokas
Эксперт WindowsАвтор FAQ
17112 / 7167 / 863
Регистрация: 25.12.2011
Сообщений: 10,964
Записей в блоге: 16
06.04.2014, 12:15 17
Лучший ответ Сообщение было отмечено Dragokas как решение

Решение

Вижу. Там особый стиль перевода каретки в логе - 0D,0D,0A

Добавьте в строку 17 код:
Bash
1
For /F "delims=" %%a in ('type list.log ^& del list.log') do call :DelCr "%%a" "list.log"
А в самый конец пакетного файла:
Bash
1
2
3
:DelCr
echo %~1>>"%~2"
Exit /B
В результате получится:

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
set server=адрес FTP
set port=21
set user=Имя пользователя
set pass=Ваш пароль
set root=каталог, из которого копировать файл
set mask=txt
set dest=папка, куда переносить файл на локальном ПК
 
set tempfile=путь + имя временного файла с командами FTP (указать любое)
 
cd /d "%~dp0"
call :GenerateComm1 "%tempfile%"
ftp -i -s:"%tempfile%"
del /F "%tempfile%"
 
For /F "delims=" %%a in ('type list.log ^& del list.log') do call :DelCr "%%a" "list.log"
For /F "delims=" %%a in (list.log) do if "%%a" neq "." if "%%a" neq ".." set /A n+=1& set "file.!n!=%%a"
 
set /a i=%random%%%%n%+1
set file=!file.%i%!
 
call :GenerateComm2 "%tempfile%" "%file%"
ftp -i -s:"%tempfile%"
del /F "%tempfile%"
 
pause
Exit /B
 
:GenerateComm1
  (
    echo open %server% %port%
    echo %user%
    echo %pass%
    echo mls "%root%" list.log
    echo disconnect
    echo bye
  ) > "%~1"
Exit /B
 
:GenerateComm2
  (
    echo open %server% %port%
    echo %user%
    echo %pass%
    echo cd "%root%"
    echo lcd "%dest%"
    echo binary
    echo hash
    echo quote PASV
    echo get "%~2"
    echo delete "%~2"
    echo disconnect
    echo bye
  ) > "%~1"
Exit /B
 
:DelCr
echo %~1>>"%~2"
Exit /B
1
Roman1978
1 / 1 / 0
Регистрация: 24.02.2014
Сообщений: 18
06.04.2014, 12:54  [ТС] 18
Спасибо работает без проблем
0
06.04.2014, 12:54
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2014, 12:54

Обновление базы от сервера на локальный компьютер через клиента
во общем такая проблемка настигла. Объясняю: есть сервер на котором находится база данных ...

Загрузить файл с FTP-сервера
Нужно загрузить файл с удаленного сервера, именно загрузить потому что копирование запрещено...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.