Ошибка установки для администратора dBASE III, переход был неожиданным

Я начинающий программист/айтишник в семейном бизнесе по финансированию недвижимости. Короче говоря, около 25-30 лет назад мы создали прикладную систему на основе dBASE III для отслеживания всех учетных записей клиентов. Стоимость перехода на современную систему была бы астрономической, и поскольку я умею программировать с достаточной эффективностью, мы сохраняем ее. Все в порядке, но все используют одну пользовательскую версию на разных рабочих станциях. Я хочу установить администратора dBASE и перейти к сетевому окружению. Я подумал, что, приступая к этому, я буду немного не в своей тарелке, но смогу справиться с этим. В настоящее время я запускаю это в системе Windows XP, без подключения к Интернету, все просто вместе.

Я получил образ установочного диска от vetusware. Я смонтировал образ через виртуальную дискету. В командной строке я перехожу к диску и следую инструкциям из руководства:

  1. Вставьте системный диск №1 в дисковод А.
  2. Измените диск по умолчанию на A, набрав A:[return]

Пока все хорошо... У меня есть подсказка.

Затем введите: A> INSTALL C: DBA

Я набираю «INSTALL C: DBA», он запускает «INSTALL.BAT», найденный на диске, но быстро сообщает «goto был неожиданным в это время». и возвращает меня к подсказке A.

Я опубликую текст командного файла ниже. После выполнения он отображает верхний бит «эхо» текста, заканчивающегося «... предыдущей версией dBASE». Но затем следующая строка — «переход был неожиданным…»

Кажется, что-то не так с пакетным файлом INSTALL, и я ничего не делаю... Я знаю, что это ошибка пакетного файла, а не ошибка внутри программы. Также странно, что программа упоминает этот DBA.COM, и его нигде нельзя найти ни на одном из дисков... Любая помощь или руководство, которые кто-либо может предоставить, будут очень признательны.

Большое спасибо,

Крис

    echo off
    cls
    echo 
    echo                dBASE III PLUS VERSION 1.1
    echo                  HARD DISK INSTALLATION 
    echo 
    echo You can copy  dBASE III PLUS  to your  hard disk  by following
    echo these  installation  instructions.  You  can  also  use  these
    echo instructions to install dBASE ADMINISTRATOR.
    echo 
    echo If you want to  save a  previously installed version of dBASE,
    echo uninstall it using that version's UNINSTAL program.
    echo 
    echo If you choose not  to save a  previous version,  install dBASE
    echo III PLUS Version 1.1 into the same directory.  This will auto-
    echo matically erase the previous version of dBASE.
    echo 
    if "%1==" goto Helpinst
    for %%f in (C:,c:,D:,d:,E:,e:,F:,f:,G:,g:,H:,h:,Y:,y:) do if %1.==%%f. goto START
    for %%f in (I:,i:,J:,j:,K:,k:,L:,l:,M:,m:,N:,n:,O:,o:,P:,p:,Z:,z:) do if %1.==%%f. goto START
    for %%f in (Q:,q:,R:,r:,S:,s:,T:,t:,U:,u:,V:,v:,W:,w:,X:,x:) do if %1.==%%f. goto START
    goto BADDRIVE
    :START
    if "==%2" goto DBASE
    if %2.==DBA. goto DBA
    if %2.==dba. goto DBA
    goto Helpinst
    :DBASE
    echo dBASE III PLUS will be installed on drive %1
    echo 
    yn Y N 30 Do you want to continue (Y/N)?
    if ERRORLEVEL 1 goto DBASE1
    goto END
    :DBASE1
    if exist dbase.lod goto ID
    if exist %1dbase.exe goto ErrExist
    if exist %1dba.com goto ERREXT
    if not exist id.exe goto MISS
    %1
    a:id /S
    a:
    echo Copying files to drive %1 . . .
    echo 
    copy dbase.exe %1
    copy dbaseinl.ovl %1
    copy dbase.msg %1
    if not exist %1config.db copy config.db %1
    if not exist %1config.sys copy config.sys %1
    :SYS2
    echo 
    echo Insert the dBASE III PLUS System Disk #2 in drive A.
    echo 
    pause
    if not exist dbase.ovl goto SYS2
    echo 
    echo Copying files to drive %1 . . .
    echo 
    copy dbase.ovl %1
    copy help.dbs %1
    copy assist.hlp %1
    if not exist %1dbase.ovl goto ErrDbase
    if not exist %1dbase.exe goto ErrDbase
    if not exist %1dbase.msg goto ErrDbase
    if not exist %1dbaseinl.ovl goto ErrDbase
    echo 
    echo dBASE III PLUS has been successfully installed.
    goto End
    :DBA
    echo dBASE ADMINISTRATOR will be installed on drive %1
    echo 
    yn Y N 30 Do you want to continue (Y/N)?
    if ERRORLEVEL 1 goto Ad1
    goto END
    :Ad1
    if exist dba.lod goto GETSYS1
    if exist %1dba.com goto ERREXT
    if exist %1dbase.exe goto ErrExist
    if not exist dbaseinl.ovl goto GETSYS1
    echo 
    echo Copying files to drive %1 . . .
    echo 
    copy help.dbs %1
    echo 
    :AD2
    echo 
    echo Insert the Administrator #1 disk in drive A
    echo 
    pause
    echo 
    if not exist dba.lod goto AD2
    :AD3
    if exist installh.sg3 goto INITDBA
    if not exist idlan.exe goto MISS
    %1
    a:idlan /M
    a:
    installh p=a t=%1
    if ERRORLEVEL 1 goto ErrDBA
    echo 
    copy dba.lod %1\dbnetctl.300
    copy dbase.msg %1
    copy protect.exe %1
    copy assist.hlp %1
    echo 
    :Ad4
    echo 
    echo Insert the Administrator #2 disk in drive A
    echo 
    pause
    echo 
    if not exist dba.ovl goto AD4
    echo Copying files to drive %1 . . .
    echo 
    copy dba.ovl %1
    copy adduser.com %1
    echo 
    echo dBASE ADMINISTRATOR has been successfully installed
    echo  
    echo One user may now run dBASE ADMINISTRATOR.  To add more users,
    echo run the  ADDUSER program.  The ADDUSER  program is located in
    echo the directory in which dBASE ADMINISTRATOR is installed.
    echo 
    goto END
    :Helpinst
    echo  You entered the command incorrectly.  The correct syntax is:
    echo 
    echo    "INSTALL <drive:>"      To install dBASE III PLUS.
    echo 
    echo    "INSTALL <drive:> DBA"      To install dBASE ADMINISTRATOR.
    echo 
    echo Install is aborted.
    goto End
   :ErrExist
    echo 
    echo  dBASE III PLUS already exists in the destination drive.
    goto ErrUnst
   :ERREXT
    echo 
    echo  dBASE ADMINISTRATOR already exists in the destination drive.
    :ErrUnst
    echo 
    echo Install is aborted.
    goto End
    :BADDRIVE
    echo  
    echo Invalid drive letter specified.  Install is aborted.
    goto Helpinst
    :ErrDbase
    echo  
    echo dBASE III PLUS is not installed.  Install is aborted.
    goto END
    :MISS
    echo  
    echo Your system disk has missing files.  Install is aborted.
    echo 
    goto DELFILE
    :ID
    echo  
    echo dBASE III PLUS has not been identified.  Please run ID.
    echo 
    goto END
    :INITDBA
    echo  
    echo dBASE ADMINISTRATOR has not been identified.  Please run IDLAN.
    echo 
    goto DELFILE
    :GETSYS1
    echo  
    echo Please use the dBASE III PLUS System Disk #1 to run the installation.
    echo Install is aborted.
    echo 
    goto END
    :ErrDBA
    echo  
    echo dBASE ADMINISTRATOR installation has been aborted.
    echo 
    :DELFILE
    if exist %1help.dbs del %1help.dbs
    :End

person Christopher Schubert    schedule 19.04.2016    source источник
comment
1. Прочтите этот раздел справки, прежде чем задавать вопросы в будущем: Как создать минимальный, полный и проверяемый пример. 2. Удалите echo off для отладки! 3. Для сравнений с учетом регистра используйте if /I. 4. Нативной команды yn нет, значит, это внешний инструмент? в противном случае проверьте команду choice.   -  person aschipfl    schedule 20.04.2016
comment
Попробуйте ввести command и следуйте инструкциям.   -  person Ross Ridge    schedule 20.04.2016
comment
@aschipfl YN.EXE является (была?) внешней программой, которая была частью DBase III+   -  person Michael Petch    schedule 20.04.2016
comment
Вы можете запустить пакетный файл из окна командной строки с первой строкой, измененной на echo on, чтобы увидеть, в какой строке пакетный файл не работает. if "==%2" goto DBASE определенно не правильно. Я предполагаю, что эта строка должна быть if ""=="%~2" goto DBASE, т.е. проверить, не передан ли второй аргумент в пакетный файл при его вызове, и в этом случае продолжить на метке DBASE.   -  person Mofi    schedule 20.04.2016
comment
Спасибо всем за помощь, извините, что нарушил несколько обычаев. Отлаживая его, я закончил REMing несколько строк, одну из которых упомянул @Mofi, и смог продолжить установку. Сейчас я продвинулся намного дальше, но столкнулся с еще одной загвоздкой. Я упоминал ранее, что не могу найти этот файл DBA.COM, и из-за него возникает ошибка при попытке запустить программу Adduser. Я буду продолжать и посмотрю, не смогу ли я найти, где этот файл должен быть... или как его получить... Еще раз спасибо!   -  person Christopher Schubert    schedule 20.04.2016
comment
Похоже, что файл DBA.COM должен быть создан программой INSTALLH. Либо ваши изменения в сценарии установки нарушили сценарий, либо вы нарушили схему защиты от копирования и/или управления лицензиями приложения.   -  person Ross Ridge    schedule 20.04.2016


Ответы (1)


Ваша проблема в том, что сценарий установки был написан для интерпретатора команд MS-DOS (COMMAND.COM) и несовместим с интерпретатором команд Windows XP (cmd.exe). Конкретная проблема заключается в том, что интерпретатор XP придает особое значение символам двойных кавычек ("), в то время как интерпретатор MS-DOS этого не делает. Это приводит к тому, что следующая строка интерпретируется по-разному, как ошибка, в XP:

if "%1==" goto Helpinst

Я не рекомендую пытаться «исправить» сценарий, чтобы он был совместим с Windows XP. Помимо того, что вам придется исправить ряд таких строк, есть гораздо более простое решение. Просто используйте интерпретатор команд MS-DOS. Вы можете сделать это, введя command в командной строке. Затем просто следуйте инструкциям, как обычно. Например:

command 
a:
install c: dba
person Ross Ridge    schedule 20.04.2016