Sua pergunta é um pouco incerta, mas suponho que você queira que o programa exiba o erro em momentos aleatórios. Para isso, você pode usar um gerador de números aleatórios.
set /a rndm=%random% * 10 / 32768 + 1
Esse código criará uma variável chamada "rndm" (isso não precisa ser chamado de rndm, você pode nomear como quiser), que é um número aleatório entre 1 e 10. Se você quiser um maior ou menor conjunto de números possíveis, você pode alterar os 10 no código para o que quiser. Então, se você quer um número aleatório entre 1 e 3, você faria isso:
set /a rndm=%random% * 3 /32768 + 1
Você pode usar isso para gerar uma chance aleatória do erro acontecer. Se você quiser ter uma chance em 10 de sair do loop, limpando a tela e inserindo um loop diferente, você quer que seu código fique assim:
@echo off
:start
echo %random%%random%%random%%random%
set /a rndm=%random% * 10 / 32768 + 1
if %rndm% == 1 goto errorstart
goto start
:errorstart
cls
:error
echo !!!!!!!!!!!!
goto error
Enquanto o loop está em execução, o programa gera um número aleatório entre 1 e 10. Logo após, verifica se o número gerado é 1. Se não for 1, continua o loop. Se for, salta para o rótulo "errorstart". O comando abaixo do rótulo errorstart limpa a tela. O programa então entra no loop de erro, onde ecoa pontos de exclamação até que o programa seja fechado.
Este código deve dar o efeito que você está procurando, mas 1 em 10 é um pouco alto demais para um programa que funciona tão rápido, então você pode querer mudar isso para 1 em 1000 ou 1 em 10.000 . Isso deve fazer o loop inicial durar mais tempo antes que o loop secundário entre em ação.