미리 정의 된 폴더의 각 하위 폴더를 ftp를 통해 원격 서버로 전송하는 배치 스크립트를 작성하고 있습니다.루프 일괄 처리 스크립트가 작동하지 않고 루프 만 수행
모든 것이 정상적으로 작동하지만 for 루프에서는 한 번만 실행되고 하나의 폴더 만 전송 한 다음 루프를 나눕니다. 나는 "에코"와 같은 루프에 대한 몇 가지 짧은 코드를 사용할 때
내가 루프
FOR /f "delims= " %%B IN ('DIR "%backup_dir%" /A:D /B') DO (
here is my code
)
의 코드를 잔뜩 가지고 올바르게 실행됩니다. 하지만 ftp 명령으로 많은 코드를 넣을 때가 아닙니다. 이러한 ftp 코드는 올바르게 실행될 수 있지만 한 번만 실행하면 루프가 나옵니다. 아래
의 코드 조각은 어떤 의견을 환영 루프
REM -- Send most recent daily backups offsite
IF !daily_flag! EQU YES (
ECHO -- Starting Daily backups for !current_folder!
ECHO.
CD 1DAYS_OLD\
REM -- Start entries for ftp commands file
ECHO user %login% %pass% > %ftp_cmds1%
ECHO cd backup/files/!current_folder!/1DAYS_OLD >> %ftp_cmds1%
ECHO quit >> %ftp_cmds1%
SET go_flag=NO
SET /a ftp_cntr=0
REM -- Loop to see if offsite backup server is alive
:CHECK_FTP1
IF !go_flag! EQU NO (
ECHO %ftp_cmds1% > %ftp_dbg1%
ftp -ind -s:%ftp_cmds1% %machine_ip% > %ftp_dbg1%
REM -- Check ftp debug file to decide what to do
FIND /i "Not connected" %ftp_dbg1%
IF !ERRORLEVEL! EQU 0 (
ECHO *** Unable to connect to offsite backup machine: %machine_ip% at %DATE%
ECHO !ftp_cntr!
IF !ftp_cntr! GTR 10 (
ECHO *** Unable to connect to offsite backup machine: %machine_ip% for 10 minutes from %machine%
ECHO ----- Start ftp debug file
TYPE %ftp_dbg1%
ECHO ----- End ftp debug file
DEL /f /q %lock_file%
DEL /f /q %ftp_cmds1%
DEL /f /q %ftp_dbg1%
EXIT 2
) ELSE (
TIMEOUT /t 60
SET /a ftp_cntr+= 1
)
) ELSE (
SET go_flag=YES
ECHO Offsite backup machine is alive, proceeding with ftp
)
GOTO :CHECK_FTP1
)
FIND /i "No such file or directory" %ftp_dbg1%
IF !ERRORLEVEL! EQU 0 (
ECHO * Directory backup/files/!current_folder! does not exist on offsite backup machine.
SET go_flag=MKDIR
)
REM -- IF %go_flag% == MKDIR create remote directory structure
IF !go_flag! EQU MKDIR (
REM -- Start entries for ftp commands file
ECHO user %login% %pass% > %ftp_cmds2%
ECHO cd ~/backup/files/ >> %ftp_cmds2%
ECHO mkdir !current_folder! >> %ftp_cmds2%
ECHO cd !current_folder! >> %ftp_cmds2%
ECHO mkdir 1DAYS_OLD >> %ftp_cmds2%
ECHO mkdir 2DAYS_OLD >> %ftp_cmds2%
ECHO mkdir 3DAYS_OLD >> %ftp_cmds2%
ECHO mkdir 4DAYS_OLD >> %ftp_cmds2%
ECHO mkdir 5DAYS_OLD >> %ftp_cmds2%
ECHO mkdir 6DAYS_OLD >> %ftp_cmds2%
ECHO mkdir 7DAYS_OLD >> %ftp_cmds2%
ECHO ls -lart >> %ftp_cmds2%
ECHO quit >> %ftp_cmds2%
ftp -ind -s:%ftp_cmds2% %machine_ip% > %ftp_dbg2%
ECHO + Directory structure backup/files/!current_folder! created on offsite backup machine: %machine_ip%
)
REM -- FTP to offsite backup machine and begin FTP transfer
ECHO user %login% %pass% > %ftp_cmds3%
ECHO binary >> %ftp_cmds3%
ECHO cd ~/backup/files/!current_folder!/7DAYS_OLD >> %ftp_cmds3%
ECHO mdelete * %ftp_cmds3%
ECHO cd .. >> %ftp_cmds3%
ECHO rmdir 7DAYS_OLD >> %ftp_cmds3%
ECHO rename 6DAYS_OLD 7DAYS_OLD >> %ftp_cmds3%
ECHO rename 5DAYS_OLD 6DAYS_OLD >> %ftp_cmds3%
ECHO rename 4DAYS_OLD 5DAYS_OLD >> %ftp_cmds3%
ECHO rename 3DAYS_OLD 4DAYS_OLD >> %ftp_cmds3%
ECHO rename 2DAYS_OLD 3DAYS_OLD >> %ftp_cmds3%
ECHO rename 1DAYS_OLD 2DAYS_OLD >> %ftp_cmds3%
ECHO mkdir 1DAYS_OLD >> %ftp_cmds3%
ECHO cd 1DAYS_OLD >> %ftp_cmds3%
ECHO mput * >> %ftp_cmds3%
ECHO quit >> %ftp_cmds3%
ECHO ---- Starting Daily FTP at: %DATE%
ftp -ind -s:%ftp_cmds3% %machine_ip% > %ftp_dbg3%
REM -- Go up a directory in case you have to next process weekly backups
CD..
CD
ECHO ---- Finished Daily backups at: %DATE%
ECHO.
ECHO.
)
에 대한
로 이동합니다!
이'ftp' 것은 배치 파일이 아니겠습니까? @Andriy가 지적한대로 –
에서 코드에 BAT 파일 호출이있을 수 있습니다. 코드를 여러 조각으로 나누고 ('CALL'명령 사용), 범인을 찾을 때까지 한 번에 한 단계 씩 디버그하십시오. –
@PA에 감사드립니다. 지금 당장 제가하는 일입니다. 그리고이 문제는 ftp 코드 부분에 있습니다. 그 부분이 없으면 루프가 정상적으로 실행되지만 그 부분 자체가 올바르게 실행될 수 있으므로 문제를 정확히 지적 할 수 없습니다. – yangqi