[英]Get file from FTP server and copy it to UNC directory
I am trying to copy a CSV file from an FTP server to a UNC file path. 我试图将CSV文件从FTP服务器复制到UNC文件路径。 I had it working from FTP to a local path, but it would be better for my project to have it copy to a UNC path.
我有它从FTP到本地路径,但我的项目将其复制到UNC路径会更好。 This must all be achieved in batch and FTP commands.
这必须在批处理和FTP命令中实现。
This is my code so far: 到目前为止这是我的代码:
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")
This is the config file: 这是配置文件:
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
Thank you for all your help ahead of time! 提前感谢您的帮助!
After changing mget
to get
as suggested in an answer by @Martin Prikryl , I am getting this error: 更改
mget
以get
@Martin Prikryl的答案中的建议后,我收到此错误:
R:I/O Error
R:I / O错误
This is the ftp output: 这是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
When redirecting the error and output of ftp to one file I get this as the output: 将错误和输出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
UNC path cannot be a working directory in Windows. UNC路径不能是Windows中的工作目录。
So lcd \\\\example.com\\share
won't work. 所以
lcd \\\\example.com\\share
将无效。
The mget
command does not allow your to specify a target path. mget
命令不允许您指定目标路径。
But you do not seem to need the mget
, as you are not using a wildcard, but downloading a specific file. 但是您似乎不需要
mget
,因为您没有使用通配符,而是下载特定文件。
So you can use the get
command instead, which allows you to specify a target path. 因此,您可以使用
get
命令 ,它允许您指定目标路径。
echo get %Filename% "%offload%\%Filename%" >> %primefolder%\ftpcmd.txt
Also note that as your %offload%
path contains a space ( New Projects
) you need to enclose the path to double-quotes. 另请注意,由于
%offload%
path包含空格( New Projects
),因此需要将路径括在双引号中。
And finally remove the 最后删除
echo lcd /D "%offload%" >> %primefolder%\ftpcmd.txt
Side note: There's no /D
switch to the FTP lcd
command (there are no switches in the Windows ftp.exe
whatsoever). 附注:没有
/D
切换到FTP lcd
命令 (Windows ftp.exe
中没有任何开关)。
Had you need to use the wildcard, you would have to use a different FTP client. 如果您需要使用通配符,则必须使用其他FTP客户端。
For example with WinSCP scripting you can use: 例如,使用WinSCP脚本,您可以使用:
winscp.com /log=winscp.log /command ^
"open ftp://%FTPUsername%:%FTPPassword%@%FTPIP%/" ^
"cd %FTPPrimary%" ^
"get %Filename% %offload%\" ^
"exit" > "%primefolder%\logs\ftpinport.log"
Note that the WinSCP get
command supports wildcards and allows you to specify target path at the same time. 请注意, WinSCP
get
命令支持通配符,并允许您同时指定目标路径。 WinSCP also defaults to binary transfer mode. WinSCP也默认为二进制传输模式。
References: 参考文献:
(I'm the author of WinSCP) (我是WinSCP的作者)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.