Получить файл с FTP-сервера и скопировать его в каталог UNC
Я пытаюсь скопировать файл CSV с FTP-сервера в путь к файлу UNC. У меня это работало с FTP на локальный путь, но для моего проекта было бы лучше скопировать его в путь UNC. Все это должно быть достигнуто в пакетных и FTP-командах.
Это мой код до сих пор:
for /f "delims=" %%x in (config.bat) do (set "%%x")
echo Start[%time%] >> "%primefolder%\TimeRun.log"
REM --------------------------------------------------------------------------------------------
REM Import .csv from the ftp server - csv imported to local directory
REM Ftpcmd.txt connects to the ftp server and copies the .csv file to a local directory
REM --------------------------------------------------------------------------------------------
echo open %FTPIP%> %primefolder%\ftpcmd.txt
echo %FTPUsername%>> %primefolder%\ftpcmd.txt
echo %FTPPassword%>> %primefolder%\ftpcmd.txt
echo cd %FTPPrimary%>> %primefolder%\ftpcmd.txt
echo binary>> %primefolder%\ftpcmd.txt
echo lcd /D "%offload%" >> %primefolder%\ftpcmd.txt
echo mget %Filename%>> %primefolder%\ftpcmd.txt
echo disconnect>> %primefolder%\ftpcmd.txt
echo quit>> %primefolder%\ftpcmd.txt
REM -----------------------------------------------------------------------------------------------------------------------------
REM Call and execute the FTP command text document (ftpcmd.txt)
REM This Code calls the file which establishes a connection and then copies the file to a local directory
REM Dynamic FTP command file is created and populated.
REM -----------------------------------------------------------------------------------------------------------------------------
ftp -i -s:"%primefolder%\ftpcmd.txt" >"%primefolder%\logs\ftpinport.log" 2>>"%primefolder%\logs\ftperr.log"
echo[%date% - %time%] >> "%primefolder%\logs\ftpinport.log"
ftp -i -d -s:%primefolder%\ftpcmd.txt
for /f "tokens=*" %%a in (%primefolder%\logs\ftperr.log) do (echo [%date% - %time%] [Error Level: 1][Issue Location:FTP][Error:%%a] >> "%primefolder%\logs\error.log")
Это файл конфигурации:
primefolder=C:\scripts
FTPIP=111.11.1.1
FTPUsername=User
FTPPassword=test
Filename=User.csv
FTPPrimary=\CSV\
FTPArchive=\CSV\Archive
offload=\\test.org\test_this\Implementation\New Projects\New\Interface
Спасибо за вашу помощь заранее!
После изменения mget
в get
как предложено в ответе @Martin Prikryl, я получаю эту ошибку:
R: ошибка ввода / вывода
Это вывод ftp:
ftp> open 111.11.1.1
Connected to 111.11.1.1.
220 Welcome to Code-Crafters Ability FTP Server.
User (111.11.1.1:(none)):
331 Please send PASS now.
230-Welcome "User".
230-There are currently 1 of 100 users logged onto this server.
230-There are currently 1 users logged onto this account.
230-You have unlimited KB of account allocation left.
230-You have 0 transfer credits remaining.
230-You lose 0 credits per KB downloaded.
230-You lose 0 credits per KB uploaded.
230 You are currently in directory "/".
ftp> cd \CSV\
250 "/CSV" is current directory.
ftp> binary
200 Type set to 'I' (IMAGE).
ftp> get User.csv \\test.org\test_this\Implementation\New Projects\New\Interface\User.csv
200 PORT command successful.
150 Data connection established, beginning transfer.
226 Transfer complete.
ftp: 1277532 bytes received in 2.64Seconds 483.91Kbytes/sec.
ftp> disconnect
221 Thanks for visiting.
ftp> quit
При перенаправлении ошибки и вывода ftp в один файл я получаю следующее:
ftp> open 111.11.1.1
Connected to 111.11.1.1
220 Welcome to Code-Crafters Ability FTP Server.
User (111.11.1.1:(none)):
331 Please send PASS now.
230-Welcome "User".
230-There are currently 2 of 100 users logged onto this server.
230-There are currently 1 users logged onto this account.
230-You have unlimited KB of account allocation left.
230-You have 0 transfer credits remaining.
230-You lose 0 credits per KB downloaded.
230-You lose 0 credits per KB uploaded.
230 You are currently in directory "/".
ftp> cd \CSV\
250 "/CSV" is current directory.
ftp> binary
200 Type set to 'I' (IMAGE).
ftp> get User.csv \\test.org\test_this\Implementation\New Projects\New\Interface\User.csv
200 PORT command successful.
150 Data connection established, beginning transfer.
> R:I/O Error
226 Transfer complete.
ftp: 1277532 bytes received in 2.84Seconds 449.20Kbytes/sec.
ftp> disconnect
221 Thanks for visiting.
ftp> quit
1 ответ
UNC-путь не может быть рабочим каталогом в Windows.
Так lcd \\example.com\share
не сработает
mget
Команда не позволяет вам указать целевой путь.
Но вам, кажется, не нужно mget
, поскольку вы не используете подстановочный знак, а загружаете определенный файл.
Таким образом, вы можете использовать get
вместо этого команда, которая позволяет вам указать целевой путь.
echo get %Filename% "%offload%\%Filename%" >> %primefolder%\ftpcmd.txt
Также обратите внимание, что как ваш %offload%
путь содержит пробел (New Projects
) вам нужно заключить путь в двойные кавычки.
И, наконец, удалить
echo lcd /D "%offload%" >> %primefolder%\ftpcmd.txt
Примечание: нет /D
переключиться на FTP lcd
команда (в винде нет переключателей ftp.exe
бы то ни было).
Если бы вам нужно было использовать подстановочный знак, вам пришлось бы использовать другой FTP-клиент.
Например, с помощью сценариев WinSCP вы можете использовать:
winscp.com /log=winscp.log /command ^
"open ftp://%FTPUsername%:%FTPPassword%@%FTPIP%/" ^
"cd %FTPPrimary%" ^
"get %Filename% %offload%\" ^
"exit" > "%primefolder%\logs\ftpinport.log"
Обратите внимание, что WinSCP get
Команда поддерживает подстановочные знаки и позволяет одновременно указать целевой путь. WinSCP также по умолчанию использует двоичный режим передачи.
Рекомендации:
- Автоматизация передачи файлов по протоколу FTP с помощью WinSCP;
- Преобразование Windows FTP-скрипта в WinSCP-скрипт.
(Я автор WinSCP)