ЕСЛИ еще СУЩЕСТВУЮТ C:\directory\ goto goto b проблемы пакетные файлы Windows XP

каждый раз, когда я работаю code ниже его происходит со мной, я сделал ошибку с помощью, если существуют строки, как неважно, существует ли каталог или нет, это действует, как будто строка еще никогда не была там... или этим или не чтение строка.


echo off  
echo  
echo (c) Ryan Leach 2010  
echo Stockmaster Backup System for exclusive use of Riverland Paper Supplies  
echo  
echo Please ensure that all computers are out of stock master to the windows xp screen  
echo and that the backup usb with the day of the week labeled on it is inserted  

pause  

IF EXIST D:\RPS_BACKUP\backups_to_zip\ goto zipexist else goto zipexistcontinue  
:zipexist  
IF EXIST d:\RPS_BACKUP\backups_old\ rd /s /q D:\RPS_BACKUP\backups_old  
echo backup did not complete last time, backup will restart from zip-usb phase.  
pause  
call zip  
goto tidyup  
:zipexistcontinue  

IF EXIST D:\RPS_BACKUP\backups_old\ goto oldexists else oldexistscontinue  
:oldexists  
IF EXIST d:\RPS_BACKUP\backup_temp\ rename D:\RPS_BACKUP\backups_temp backups_to_zip  
rd /s /q D:\RPS_BACKUP\backups_old  
echo backup did not complete last time, backup will restart at the zip to usb phase.  
pause  
call zip  
goto tidyup  
:oldexistscontinue  

IF EXIST D:\RPS_BACKUP\backups_temp\ goto tempexists else goto tempexistscontinue  
:tempexists  
IF EXIST D:\RPS_BACKUP\backups_old\ goto backupfailed else goto tempexistscontinue  
:backupfailed  
@rd /s /q D:\RPS_BACKUP\backups_temp  
echo backup did not complete last time, backup will restart from start.  
pause  
:tempexistscontinue  

md D:\RPS_BACKUPS\backups_temp  
xcopy \\user1\c\* D:\RPS_BACKUP\backups_temp\user1\c /h /e /z /f /r /i /s /k  
IF NOT ERRORLEVEL == 1 GOTO ErrorHandler  
xcopy C:\* D:\RPS_BACKUP\backups_temp\user2\c /h /e /f /r /i /s /k  
IF NOT ERRORLEVEL == 1 GOTO ErrorHandler  
xcopy \\user3\c\* D:\RPS_BACKUP\backups_temp\user3\c /h /e /z /f /r /i /s /k  
IF NOT ERRORLEVEL == 1 GOTO ErrorHandler  
call sub  
call zip  
:tidyup  
rename D:\RPS_BACKUP\backups_to_zip backups  
pause  
goto :eof  

:ErrorHandler  
echo xcopyerrorcode is ERRORLEVEL contact ryan  
pause  
9
задан Aruna 15 November 2016 в 05:45
поделиться

4 ответа

Используйте круглые скобки для группировки отдельных ветвей:

IF EXIST D:\RPS_BACKUP\backups_to_zip\ (goto zipexist) else goto zipexistcontinue

В вашем случае синтаксический анализатор никогда не увидит else , принадлежащий if , потому что goto с радостью примет все до конца команды. Вы можете увидеть аналогичную проблему при использовании echo вместо goto .

Также использование круглых скобок позволит вам использовать операторы напрямую, без необходимости прыгать вокруг (хотя я не смог переписать ваш код, чтобы фактически использовать методы структурированного программирования; возможно, это слишком рано или это не подходит для блочные структуры, как сейчас код).

20
ответ дан 4 December 2019 в 06:40
поделиться

Из справки ( if /? ):

The ELSE clause must occur on the same line as the command after the IF.  For
example:

    IF EXIST filename. (
        del filename.
    ) ELSE (
        echo filename. missing.
    )

The following would NOT work because the del command needs to be terminated
by a newline:

    IF EXIST filename. del filename. ELSE echo filename. missing

Nor would the following work, since the ELSE command must be on the same line
as the end of the IF command:

    IF EXIST filename. del filename.
    ELSE echo filename. missing
5
ответ дан 4 December 2019 в 06:40
поделиться

Если вы хотите исключить какие-либо проблемы с частью else , попробуйте удалить else и поместить команду в новую строку. Как это:

IF EXIST D:\RPS_BACKUP\backups_temp\ goto tempexists
goto tempexistscontinue  
7
ответ дан 4 December 2019 в 06:40
поделиться

Есть ЕЩЕЕ на языке пакетной обработки DOS? В те дни, когда я больше занимался подобными вещами, этого не было.

Если моя теория верна и ваш ELSE игнорируется, вам может быть лучше выполнить

IF NOT EXIST file GOTO label

... что также сэкономит вам строку кода (ту, которая находится сразу после вашего IF).

Во-вторых, я смутно помню какую-то ошибку с проверкой существования каталогов. Жизнь была бы проще, если бы вы могли проверить наличие файла в этом каталоге. Если нет файла, в котором вы можете быть уверены, попробуйте (это работало до Win95, IIRC) было бы добавить имя файла устройства NUL к имени вашего каталога, например

IF NOT EXIST C:\dir\NUL GOTO ...
2
ответ дан 4 December 2019 в 06:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: