BATCH /连接到FTP并将目录列表放在一个数组中

时间:2015-04-11 15:51:25

标签: vbscript

我试过在BAT中这样做,但我认为不能这样做。

已经问过 - 链接:batch-ftp-list-directories-and-put-in-array

目的:

  • 连接到FTP
  • 转到特定文件夹/var/www/xxx.com/image/go
  • 列出该文件夹中目录和子目录的完整路径
  • 将列表放入数组

我对VBS很新,这不是我的事。但是BATCH似乎受限于FTP功能。

echo user xxx> c:\cmd.dat
echo 1234>> c:\cmd.dat
echo cd /var/www/xxx/html/TEST>> c:\cmd.dat
echo ls * c:\list.txt>> c:\cmd.dat
echo bye>> c:\cmd.dat
ftp -n -s:c:\cmd.dat xxx xxx xxx

REM This reads a file called list.txt and makes and array


REM - Removes blank lines   
For /F "tokens=* delims=" %%A in (c:\list.txt) Do (
Echo %%A >> c:\list_clean.txt )

pause
set "file=c:\list.txt"
set /A i=0

for /F "usebackq delims=" %%a in ("%file%") do (
set /A i+=1
call echo %%i%%
call set array[%%i%%]=%%a
call set n=%%i%%
)

for /L %%i in (1,1,%n%) do call echo %%array[%%i]%%

pause
del c:\cmd.dat
del c:\wfslist.txt

我需要添加这些小说:

2 个答案:

答案 0 :(得分:3)

这是一个仅用于测试的示例,只能列出位于公共ftp服务器(如ftp.microsoft.com)上的文件夹中的文件,以便创建list.txt文件以进行下载之后,请尝试告诉我们结果。

注意:请不要忘记添加标签批次

@echo off
mode con cols=85 lines=22 & Color A
::***********************************
Set FTPSERVER=ftp.microsoft.com
Title Lister les fichiers et les dossiers sur un serveur FTP (%FTPSERVER%) by Hackoo
Set USER=anonymous
Set Password=anonymous@anonymous.com
Set DossierFTP=/bussys/winsock/winsock2/
Set DownloadFolder=winsock2
::*******************************************************
Goto Lister
:Lister
> ft.do echo Open %FTPSERVER%
>> ft.do echo %USER%
>> ft.do echo %Password%
>> ft.do echo prompt n
>> ft.do echo bin
>> ft.do echo cd %DossierFTP%
>> ft.do echo ls -h TLIST.txt
>> ft.do echo bye
ftp -s:ft.do
del ft.do
CLS
Color 9B
echo Download la liste
pause
Goto Download
::*********************************************************
:Download
> ft.do echo Open %FTPSERVER%
>> ft.do echo %USER%
>> ft.do echo %Password%
>> ft.do echo prompt n
>> ft.do echo bin
>> ft.do echo cd %DossierFTP%
for /F %%f in (TLIST.txt) do ( >> ft.do echo get %%f) 
>> ft.do echo bye
ftp -s:ft.do
del ft.do
CLS
Color 9A
pause
echo Deplacer la liste
Goto Deplacer
::*********************************************************
:Deplacer
Set Source=%~dp0
Set Destination=%Source%%DownloadFolder%
if not exist %DownloadFolder% MD %DownloadFolder%
for /F %%f in (TLIST.txt) do (move "%Source%%%f" "%Destination%")
pause

答案 1 :(得分:0)

这是我的尝试。

这是一个实用程序脚本,列出了一个远程目录(完整路径,没有别的)。它被设计为可重用(即它使用参数)并从其他脚本调用。

另存为ftpls.bat。

@echo off
setlocal

rem USAGE: call with 4 parameters
rem ftpls hostname USER PASS path/on/remote/machine

set "script=%TEMP%\ftpscript.txt"
set "output=%TEMP%\ftplist.txt"
set "host=%1"
set "user=%2"
set "pass=%3"
set "dir=%4"

>  "%script%" echo open %host%
>> "%script%" echo user %user%
>> "%script%" echo %pass%
>> "%script%" echo cd %dir%
>> "%script%" echo ls * %output%
>> "%script%" echo bye

ftp -n -s:"%script%"

rem modify "skip" and "tokens" to select the right lines and columns
for /f "skip=1 tokens=6,*" %%a in (%output%) do (
  echo %dir%/%%b
)

del "%script%"
del "%output%"

for循环删除文件名(这是列表每行的最后一部分)。如果tokens对您的FTP服务器不起作用,请选择正确的6,*参数。 6,*表示第6列将变为%%a,其余部分(*)将变为%%b。 6应该是文件名前面的列。

单独调用

ftpls xxx.xxx.xxx.xxx USER PASS /var/www/xxx/html/TEST

在另一个批处理文件中使用它,如

set cmd=ftpls xxx.xxx.xxx.xxx USER PASS /var/www/xxx/html/TEST
for /f "delims=" %%a in ('%cmd%') do (
  echo %%a
)