Vbscript 批处理/连接到FTP并将目录列表放入阵列中

Vbscript 批处理/连接到FTP并将目录列表放入阵列中,vbscript,Vbscript,我曾尝试在BAT中这样做,但我认为这是不可能的 已被询问-链接: 目标: 连接到FTP 转到特定文件夹/var/www/xxx.com/image/Go 列出该文件夹中目录和子目录的完整路径 将列表放入数组中 我对VBS很陌生,这真的不是我的专长。然而,批处理似乎受到FTP功能的限制 echo user xxx> c:\cmd.dat echo 1234>> c:\cmd.dat echo cd /var/www/xxx/html/TEST>> c:\cmd.d

我曾尝试在BAT中这样做,但我认为这是不可能的

已被询问-链接:

目标:

  • 连接到FTP
  • 转到特定文件夹
    /var/www/xxx.com/image/Go
  • 列出该文件夹中目录和子目录的完整路径
  • 将列表放入数组中
我对VBS很陌生,这真的不是我的专长。然而,批处理似乎受到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

我需要添加以下虚构内容:

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

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

@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

这是我的尝试

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

另存为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
循环将删除文件名(这是列表每一行的最后一部分)。如果您的FTP服务器无法使用
6,*
,请选择正确的
tokens
参数
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
)

您可以从批处理脚本调用。你试过使用它吗?请再次阅读文档。请看-s参数。是的,这就是它的意思。您可以将ftp.exe的输出重定向到一个文件中。之后,您可以使用来切断不需要的行。您也可以使用
for/f“skip=X”%%l in(“%command%”)do echo%%l
在保存临时文件时跳过X行(
%command%
将是您的ftp.exe调用)。您好,@hackoo它不执行我希望它执行的操作,但是1+。请看一下我的代码。马上就要到了。你的脚本对其他东西很有用:)非常好,确实非常好。有没有办法让
echo ls*
来回送完整的路径?这将节省大量的编码。我已经厌倦了许多
ls*、ls*/etc
或其他命令。我也累了。