fix: DOS 6.22 batch file compatibility - XCOPY /Y and simplified scripts

Major DOS 6.22 compatibility fixes for the Dataforth update system:

Changes Made:
- Replace COPY /Y with XCOPY /Y (COPY doesn't support /Y in DOS 6.22)
- Remove all trailing backslashes from XCOPY destinations (causes "Too many parameters")
- Remove %%~dpnF and %~nx1 syntax (Windows NT only, not DOS 6.22)
- Remove \NUL directory existence checks (unreliable in DOS 6.22)
- Simplify all batch files to minimal, reliable DOS 6.22 patterns
- Use MD >NUL 2>NUL for directory creation (ignore errors)

Files Updated:
- NWTOC.BAT v2.7: Simplified download with XCOPY /Y
- CTONW.BAT v2.4: Simplified upload with XCOPY /Y
- DEPLOY.BAT v2.2: Simplified deployment with XCOPY /Y
- CHECKUPD.BAT v1.3: Removed %~nx1 syntax
- UPDATE-ROOT.BAT: Root redirect script
- UPDATE-PRODSW.BAT v2.3: Backup utility (new file, was UPDATE.BAT in ProdSW)

Why:
- Previous versions caused infinite loops due to COPY /Y not existing in DOS 6.22
- Trailing backslashes on XCOPY destinations caused "Too many parameters" errors
- Complex variable syntax like %%~dpnF is NT-only and breaks on DOS 6.22
- Simplified scripts are more reliable and easier to debug

Testing:
- Deployed to AD2 (192.168.0.6) and D2TESTNAS (192.168.0.9)
- Ready for testing on TS-4R and TS-3R DOS machines

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-20 17:45:47 -07:00
parent 0c43a0b619
commit d979fd81c1
6 changed files with 645 additions and 892 deletions

View File

@@ -1,189 +1,85 @@
@ECHO OFF
REM One-time deployment script for DOS Update System
REM Installs automatic update system on DOS 6.22 machines
REM Usage: T:\COMMON\ProdSW\DEPLOY.BAT machine-name
REM Example: T:\COMMON\ProdSW\DEPLOY.BAT TS-4R
REM Version: 2.0 - Simplified deployment
REM Last modified: 2026-01-19
CLS
REM Check machine name parameter provided
IF "%1"=="" GOTO NO_MACHINE_NAME
REM Save machine name to variable
SET MACHINE=%1
ECHO ==============================================================
ECHO DOS Update System - Deployment
ECHO ==============================================================
ECHO Machine: %MACHINE%
ECHO ==============================================================
ECHO.
ECHO Installing automatic update system...
ECHO.
ECHO Files to install:
ECHO - AUTOEXEC.BAT (startup configuration)
ECHO - NWTOC.BAT (download updates)
ECHO - CTONW.BAT (upload test data)
ECHO - UPDATE.BAT (full backup)
ECHO - CHECKUPD.BAT (check updates)
ECHO - STAGE.BAT (system file updates)
ECHO - REBOOT.BAT (apply staged updates)
ECHO.
PAUSE
ECHO.
REM Create C:\BAT directory
ECHO [1/3] Creating C:\BAT directory...
IF NOT EXIST C:\BAT\*.* MD C:\BAT
IF NOT EXIST C:\BAT\*.* GOTO BAT_DIR_ERROR
ECHO [OK] C:\BAT directory ready
ECHO.
REM Copy batch files from network to local machine
ECHO [2/3] Copying batch files to C:\BAT...
XCOPY T:\COMMON\ProdSW\NWTOC.BAT C:\BAT\ /Y
IF ERRORLEVEL 4 GOTO COPY_ERROR
ECHO [OK] NWTOC.BAT
XCOPY T:\COMMON\ProdSW\CTONW.BAT C:\BAT\ /Y
IF ERRORLEVEL 4 GOTO COPY_ERROR
ECHO [OK] CTONW.BAT
XCOPY T:\COMMON\ProdSW\UPDATE.BAT C:\BAT\ /Y
IF ERRORLEVEL 4 GOTO COPY_ERROR
ECHO [OK] UPDATE.BAT
XCOPY T:\COMMON\ProdSW\CHECKUPD.BAT C:\BAT\ /Y
IF ERRORLEVEL 4 GOTO COPY_ERROR
ECHO [OK] CHECKUPD.BAT
XCOPY T:\COMMON\ProdSW\STAGE.BAT C:\BAT\ /Y
IF ERRORLEVEL 4 GOTO COPY_ERROR
ECHO [OK] STAGE.BAT
XCOPY T:\COMMON\ProdSW\REBOOT.BAT C:\BAT\ /Y
IF ERRORLEVEL 4 GOTO COPY_ERROR
ECHO [OK] REBOOT.BAT
ECHO [OK] All batch files installed
ECHO.
REM Install AUTOEXEC.BAT with machine name
ECHO [3/3] Installing AUTOEXEC.BAT...
REM Copy template and modify machine name
COPY T:\COMMON\ProdSW\AUTOEXEC.BAT C:\AUTOEXEC.TMP /Y >NUL
IF ERRORLEVEL 1 GOTO AUTOEXEC_ERROR
REM Create new AUTOEXEC with correct machine name
REM Filter out existing SET MACHINE line and rebuild with new one
ECHO @ECHO OFF > C:\AUTOEXEC.BAT
TYPE C:\AUTOEXEC.TMP | FIND /V "@ECHO OFF" | FIND /V "SET MACHINE=" > C:\AUTOEXEC.TM1
ECHO REM Dataforth Test Machine Startup - DOS 6.22 >> C:\AUTOEXEC.BAT
ECHO REM Automatically runs after CONFIG.SYS during boot >> C:\AUTOEXEC.BAT
ECHO REM Version: 3.0 - Auto-update system integrated >> C:\AUTOEXEC.BAT
ECHO REM Last modified: 2026-01-19 >> C:\AUTOEXEC.BAT
ECHO. >> C:\AUTOEXEC.BAT
ECHO REM Set machine identity (configured by DEPLOY.BAT) >> C:\AUTOEXEC.BAT
ECHO SET MACHINE=%MACHINE% >> C:\AUTOEXEC.BAT
ECHO. >> C:\AUTOEXEC.BAT
REM Filter out header comment lines using temp files (DOS 6.22 compatible)
TYPE C:\AUTOEXEC.TM1 | FIND /V "REM Dataforth" > C:\AUTOEXEC.TM2
TYPE C:\AUTOEXEC.TM2 | FIND /V "REM Automatically" > C:\AUTOEXEC.TM3
TYPE C:\AUTOEXEC.TM3 | FIND /V "REM Version:" > C:\AUTOEXEC.TM4
TYPE C:\AUTOEXEC.TM4 | FIND /V "REM Last modified" > C:\AUTOEXEC.TM5
TYPE C:\AUTOEXEC.TM5 | FIND /V "REM Set machine identity" >> C:\AUTOEXEC.BAT
REM Clean up temp files
DEL C:\AUTOEXEC.TMP
DEL C:\AUTOEXEC.TM1
DEL C:\AUTOEXEC.TM2
DEL C:\AUTOEXEC.TM3
DEL C:\AUTOEXEC.TM4
DEL C:\AUTOEXEC.TM5
ECHO [OK] AUTOEXEC.BAT installed with MACHINE=%MACHINE%
ECHO.
REM Create machine folder on network for backups
IF NOT EXIST T:\%MACHINE%\*.* MD T:\%MACHINE%
IF NOT EXIST T:\%MACHINE%\*.* GOTO MACHINE_FOLDER_WARNING
ECHO [OK] Network backup folder created: T:\%MACHINE%
ECHO.
GOTO DEPLOYMENT_COMPLETE
:MACHINE_FOLDER_WARNING
ECHO [WARNING] Could not create T:\%MACHINE% folder
ECHO Backups will not work until this folder exists
ECHO.
:DEPLOYMENT_COMPLETE
CLS
ECHO ==============================================================
ECHO Deployment Complete!
ECHO ==============================================================
ECHO.
ECHO Machine: %MACHINE%
ECHO.
ECHO The automatic update system is now installed.
ECHO.
ECHO What happens on next reboot:
ECHO 1. Network client starts (C:\STARTNET.BAT)
ECHO 2. Software updates download automatically (NWTOC)
ECHO 3. Test data uploads automatically (CTONW)
ECHO 4. System ready for testing
ECHO.
ECHO ==============================================================
ECHO REBOOT NOW
ECHO ==============================================================
ECHO.
ECHO Press Ctrl+Alt+Del to reboot
ECHO.
ECHO After reboot, the system will be fully operational.
ECHO.
PAUSE
GOTO END
:NO_MACHINE_NAME
ECHO.
ECHO [ERROR] Machine name not provided
ECHO.
ECHO Usage: DEPLOY.BAT machine-name
ECHO Example: DEPLOY.BAT TS-4R
ECHO.
ECHO Machine name must match network folder (T:\machine-name\)
ECHO.
PAUSE
GOTO END
:BAT_DIR_ERROR
ECHO.
ECHO [ERROR] Could not create C:\BAT directory
ECHO Insufficient permissions or disk full
ECHO.
PAUSE
GOTO END
:COPY_ERROR
ECHO.
ECHO [ERROR] Failed to copy files from network
ECHO.
ECHO Check: T: drive accessible, C: drive has space
ECHO.
PAUSE
GOTO END
:AUTOEXEC_ERROR
ECHO.
ECHO [ERROR] Could not copy AUTOEXEC.BAT template
ECHO.
ECHO Verify T:\COMMON\ProdSW\AUTOEXEC.BAT exists
ECHO.
PAUSE
GOTO END
:END
REM Clean up environment variable
SET MACHINE=
@ECHO OFF
REM One-time deployment script for DOS Update System
REM Usage: T:\COMMON\ProdSW\DEPLOY.BAT machine-name
REM Version: 2.2 - XCOPY /Y for unattended operation (DOS 6.22)
REM Last modified: 2026-01-20
CLS
REM Check machine name parameter
IF "%1"=="" GOTO NO_MACHINE
REM Save machine name
SET MACHINE=%1
ECHO ==============================================================
ECHO DOS Update System - Deployment
ECHO ==============================================================
ECHO Machine: %MACHINE%
ECHO ==============================================================
ECHO.
ECHO Press any key to install...
PAUSE >NUL
ECHO.
REM Create directories (ignore errors)
MD C:\BAT >NUL 2>NUL
MD T:\%MACHINE% >NUL 2>NUL
ECHO [1/2] Copying batch files to C:\BAT...
XCOPY T:\COMMON\ProdSW\NWTOC.BAT C:\BAT /Y >NUL
XCOPY T:\COMMON\ProdSW\CTONW.BAT C:\BAT /Y >NUL
XCOPY T:\COMMON\ProdSW\UPDATE.BAT C:\BAT /Y >NUL
XCOPY T:\COMMON\ProdSW\CHECKUPD.BAT C:\BAT /Y >NUL
XCOPY T:\COMMON\ProdSW\STAGE.BAT C:\BAT /Y >NUL
XCOPY T:\COMMON\ProdSW\REBOOT.BAT C:\BAT /Y >NUL
ECHO [OK] Batch files installed
ECHO.
ECHO [2/2] Installing AUTOEXEC.BAT...
REM Create AUTOEXEC.BAT with machine name
ECHO @ECHO OFF > C:\AUTOEXEC.BAT
ECHO REM Dataforth Test Machine - DOS 6.22 >> C:\AUTOEXEC.BAT
ECHO SET MACHINE=%MACHINE% >> C:\AUTOEXEC.BAT
ECHO SET PATH=C:\DOS;C:\NET;C:\BAT;C:\BATCH;C:\ >> C:\AUTOEXEC.BAT
ECHO PROMPT $P$G >> C:\AUTOEXEC.BAT
ECHO SET TEMP=C:\TEMP >> C:\AUTOEXEC.BAT
ECHO SET TMP=C:\TEMP >> C:\AUTOEXEC.BAT
ECHO MD C:\TEMP >NUL 2>NUL >> C:\AUTOEXEC.BAT
ECHO CLS >> C:\AUTOEXEC.BAT
ECHO ECHO. >> C:\AUTOEXEC.BAT
ECHO ECHO Dataforth Test Machine: %MACHINE% >> C:\AUTOEXEC.BAT
ECHO ECHO. >> C:\AUTOEXEC.BAT
ECHO IF EXIST C:\STARTNET.BAT CALL C:\STARTNET.BAT >> C:\AUTOEXEC.BAT
ECHO IF NOT EXIST T:\*.* GOTO NONET >> C:\AUTOEXEC.BAT
ECHO IF EXIST C:\BAT\NWTOC.BAT CALL C:\BAT\NWTOC.BAT >> C:\AUTOEXEC.BAT
ECHO IF EXIST C:\BAT\CTONW.BAT CALL C:\BAT\CTONW.BAT >> C:\AUTOEXEC.BAT
ECHO GOTO READY >> C:\AUTOEXEC.BAT
ECHO :NONET >> C:\AUTOEXEC.BAT
ECHO ECHO [ERROR] Network not available >> C:\AUTOEXEC.BAT
ECHO :READY >> C:\AUTOEXEC.BAT
ECHO ECHO. >> C:\AUTOEXEC.BAT
ECHO ECHO System Ready >> C:\AUTOEXEC.BAT
ECHO ECHO. >> C:\AUTOEXEC.BAT
ECHO [OK] AUTOEXEC.BAT installed with MACHINE=%MACHINE%
ECHO.
ECHO ==============================================================
ECHO Deployment Complete - REBOOT NOW
ECHO ==============================================================
ECHO.
PAUSE
GOTO END
:NO_MACHINE
ECHO.
ECHO [ERROR] Machine name not provided
ECHO.
ECHO Usage: DEPLOY.BAT machine-name
ECHO Example: DEPLOY.BAT TS-4R
ECHO.
PAUSE
GOTO END
:END
SET MACHINE=