如何解决批处理脚本中的错误“ %% i这一次是意外的”?

时间:2019-04-16 10:52:16

标签: batch-file ftp

我试图根据文件名从FTP服务器下载一些文件并将它们放置在不同的文件夹中。

使用:

FOR /F "tokens=1 delims=" %%i IN (%binpath%inputfilelist.txt) DO ECHO. get %%i >> %binpath%unixftp_get1.txt

我遇到了错误:

  

%% i这一次出乎意料

我已经检查了inputfilelist.txt中的文件,有2个文件可用。

REM **********************Determine input file count*******************************************

SET target=TXT
CHDIR /d %binpath%
find /c  "%target%" < %binpath%inputfilelist.txt >  %binpath%inputfilecount.txt 
SET /p inputfile_cnt=<%binpath%inputfilecount.txt

IF %inputfile_cnt%!==!0 GOTO PROCEED

IF %inputfile_cnt%==0 GOTO END

:PROCEED

REM ******************** Dynamically create the ftp get commands file and download the files*************************
copy %binpath%unix_ftp.config %binpath%unixftp_get1.txt

FOR /F "tokens=1 delims=" %%i IN (%binpath%inputfilelist.txt) DO ECHO. get %%i >> %binpath%unixftp_get1.txt

ECHO. bye >>  %binpath%unixftp_get1.txt

ftp -v -s:"%binpath%unixftp_get1.txt" %server% >> "%logpath%%ftp_log%"

预期结果是文件名abc.txt必须附加在文件unixftp_get1.txt中。

1 个答案:

答案 0 :(得分:0)

如果您看一下这一行:

IF %inputfile_cnt%!==!0 GOTO PROCEED

它不会GOTO PROCEED,因为您的比较期望 #! !0 (其中{{ 1}}是包含#的行数,但显然永远不会。

要解决此问题,通常应使用以下语法:

TXT

然后您将其下方的行更改为:

IF NOT "%inputfile_cnt%"=="0" GOTO PROCEED

这里是您代码段的重写,请尝试一下并根据需要提供反馈:

GOTO END