Как исправить ошибку «%% я был неожидан в это время» в пакетном скрипте? - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь загрузить несколько файлов с FTP-сервера и поместить их в разные папки, основываясь на их именах.

Использование:

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

Я получаю ошибку:

%% Я был неожиданным в это время

Я проверил файлы в 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 голосов
/ 16 апреля 2019

Если вы посмотрите на эту строку:

IF %inputfile_cnt%!==!0 GOTO PROCEED

Это не будет GOTO PROCEED, потому что ваше сравнение ожидает, что #! будет соответствовать !0, (где # - количество строк, содержащих TXT) , но этого явно не будет.

Чтобы исправить это, вы обычно используете следующий синтаксис:

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

Затем вы измените строку под ней на:

GOTO END

Вот переписать ваш фрагмент, попробуйте и при необходимости предоставьте отзыв:

REM ************************ Determine input file count ************************
SET "target=TXT"
CD /D "%binpath%"

FOR %%A IN (logpath,ftp_log)DO IF NOT DEFINED %%A GOTO END

FOR %%A IN ("inputfilelist.txt","unix_ftp.config","%logpath%"
)DO IF NOT EXIST "%%~A" GOTO END

FOR /F %%A IN ('FIND /C "%target%"^<"inputfilelist.txt"'
)DO IF "%%A"=="0" GOTO END

:PROCEED
REM *** Dynamically create the ftp get commands file, and download the files ***
COPY /Y "unix_ftp.config" "unixftp_get1.txt"

(   FOR /F "DELIMS=" %%A IN ("inputfilelist.txt")DO ECHO get %%A
    ECHO bye
)>>"unixftp_get1.txt"

ftp -v -s:"unixftp_get1.txt" %server% >>"%logpath%%ftp_log%"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...