I have a problem with a .bat script called "ProcessMKV_EngAud_EngSub.bat" that utilizes MKVToolNix on Windows 10. This is the script:

@echo off
setlocal enabledelayedexpansion

REM ===========================
REM Configuration
REM ===========================

REM Destination directory where processed files will be saved
set "DEST_DIR=D:\Video\MKVConvert"

REM Path to the mkvmerge executable
set "MKVMERGE=C:\Program Files\MKVToolNix\mkvmerge.exe"

REM ===========================
REM Setup
REM ===========================

REM Create destination directory if it does not already exist
if not exist "%DEST_DIR%" (
    mkdir "%DEST_DIR%"
)

REM ===========================
REM Processing
REM ===========================

REM Loop through each MKV file in the current directory
for %%a in (*.mkv) do (
    REM Get the base name of the file without extension
    set "FILE_NAME=%%~na"

    REM Define the output filename
    set "OUTPUT_FILE=%DEST_DIR%\%%~na.mkv"

    REM Check if the output file already exists
    if exist "!OUTPUT_FILE!" (
        echo Warning: Output file "!OUTPUT_FILE!" already exists. Skipping...
    ) else (
        REM Display a message indicating processing
        echo Processing: %%~nxa

        REM Execute mkvmerge to process the file
        "%MKVMERGE%" ^
            --ui-language en ^
            --priority highest ^
            --video-tracks 0 ^
            --audio-tracks 1 ^
            --subtitle-tracks 2 ^
            --no-attachments ^
            --no-global-tags ^
            --no-track-tags ^
            --no-chapters ^
            --language 0:en ^
            --track-name 0: ^
            --default-track-flag 0:yes ^
            --language 1:en ^
            --track-name 1: ^
            --default-track-flag 1:yes ^
            --sub-charset 2:UTF-8 ^
            --language 2:en ^
            --track-name 2: ^
            --default-track-flag 2:yes ^
            --title "" ^
            --track-order 0:0,0:1,0:2 ^
            --output "!OUTPUT_FILE!" ^
            "%%~fa"

        REM Check if the processing was successful
        if !errorlevel! equ 0 (
            echo Successfully processed %%~nxa and saved as !OUTPUT_FILE!
        ) else (
            echo Error: Failed to process %%~nxa. Please check the input file and try again.
        )
    )
)

REM ===========================
REM Completion Message
REM ===========================

REM Display a completion message for processing
echo.
echo All MKV files have been processed and saved in %DEST_DIR%.

REM Pause the script to allow the user to see the output
pause

Here are the files it's supposed to run through:

The Cleveland Show (2009) - S02E02 - Cleveland Live!.mkv
The Cleveland Show (2009) - S02E09 - Beer Walk!.mkv
The Cleveland Show (2009) - S03E02 - The Hurricane!.mkv
The Cleveland Show (2009) - S03E16 - Frapp Attack!.mkv
The Cleveland Show (2009) - S04E12 - Pins, Spins and Fins!.mkv
The Cleveland Show (2009) - S04E23 - Wheel! Of! Family!.mkv

Here is the output in the terminal once the script has been ran:

Processing: The Cleveland Show (2009) - S02E02 - Cleveland Live.mkv
mkvmerge v86.0 ('Winter') 64-bit
Error: The file 'D:\Video\The Cleveland Show (2009) - S02E02 - Cleveland Live.mkv' could not be opened for reading: open file error.
Error: Failed to process The Cleveland Show (2009) - S02E02 - Cleveland Live.mkv. Please check the input file and try again.
Processing: The Cleveland Show (2009) - S02E09 - Beer Walk.mkv
mkvmerge v86.0 ('Winter') 64-bit
Error: The file 'D:\Video\The Cleveland Show (2009) - S02E09 - Beer Walk.mkv' could not be opened for reading: open file error.
Error: Failed to process The Cleveland Show (2009) - S02E09 - Beer Walk.mkv. Please check the input file and try again.
Processing: The Cleveland Show (2009) - S03E02 - The Hurricane.mkv
mkvmerge v86.0 ('Winter') 64-bit
Error: The file 'D:\Video\The Cleveland Show (2009) - S03E02 - The Hurricane.mkv' could not be opened for reading: open file error.
Error: Failed to process The Cleveland Show (2009) - S03E02 - The Hurricane.mkv. Please check the input file and try again.
Processing: The Cleveland Show (2009) - S03E16 - Frapp Attack.mkv
mkvmerge v86.0 ('Winter') 64-bit
Error: The file 'D:\Video\The Cleveland Show (2009) - S03E16 - Frapp Attack.mkv' could not be opened for reading: open file error.
Error: Failed to process The Cleveland Show (2009) - S03E16 - Frapp Attack.mkv. Please check the input file and try again.
Processing: The Cleveland Show (2009) - S04E12 - Pins, Spins and Fins.mkv
mkvmerge v86.0 ('Winter') 64-bit
Error: The file 'D:\Video\The Cleveland Show (2009) - S04E12 - Pins, Spins and Fins.mkv' could not be opened for reading: open file error.
Error: Failed to process The Cleveland Show (2009) - S04E12 - Pins, Spins and Fins.mkv. Please check the input file and try again.
Processing: The Cleveland Show (2009) - S04E23 - Wheel Family.mkv
mkvmerge v86.0 ('Winter') 64-bit
Error: The file 'D:\Video\The Cleveland Show (2009) - S04E23 - Wheel Family.mkv' could not be opened for reading: open file error.
Error: Failed to process The Cleveland Show (2009) - S04E23 - Wheel Family.mkv. Please check the input file and try again.

All MKV files have been processed and saved in D:\Video\MKVConvert.
Press any key to continue . . .




However, if I remove all the exclamation points ("!") from the filename, so that the files look like this:

The Cleveland Show (2009) - S02E02 - Cleveland Live.mkv
The Cleveland Show (2009) - S02E09 - Beer Walk.mkv
The Cleveland Show (2009) - S03E02 - The Hurricane.mkv
The Cleveland Show (2009) - S03E16 - Frapp Attack.mkv
The Cleveland Show (2009) - S04E12 - Pins, Spins and Fins.mkv
The Cleveland Show (2009) - S04E23 - Wheel Of Family.mkv


Then the script has absolutely no issues at all and the output in the terminal once the script has been ran is this:

Processing: The Cleveland Show (2009) - S02E02 - Cleveland Live.mkv
mkvmerge v86.0 ('Winter') 64-bit
'D:\Video\The Cleveland Show (2009) - S02E02 - Cleveland Live.mkv': Using the demultiplexer for the format 'Matroska'.
'D:\Video\The Cleveland Show (2009) - S02E02 - Cleveland Live.mkv' track 0: Using the output module for the format 'HEVC/H.265'.
'D:\Video\The Cleveland Show (2009) - S02E02 - Cleveland Live.mkv' track 1: Using the output module for the format 'AAC'.
Warning: 'D:\Video\The Cleveland Show (2009) - S02E02 - Cleveland Live.mkv': A track with the ID 2 was requested but not found in the file. The corresponding option will be ignored.
The file 'D:\Video\MKVConvert\The Cleveland Show (2009) - S02E02 - Cleveland Live.mkv' has been opened for writing.
The cue entries (the index) are being written...
Multiplexing took 2 seconds.
Error: Failed to process The Cleveland Show (2009) - S02E02 - Cleveland Live.mkv. Please check the input file and try again.
Processing: The Cleveland Show (2009) - S02E09 - Beer Walk.mkv
mkvmerge v86.0 ('Winter') 64-bit
'D:\Video\The Cleveland Show (2009) - S02E09 - Beer Walk.mkv': Using the demultiplexer for the format 'Matroska'.
'D:\Video\The Cleveland Show (2009) - S02E09 - Beer Walk.mkv' track 0: Using the output module for the format 'HEVC/H.265'.
'D:\Video\The Cleveland Show (2009) - S02E09 - Beer Walk.mkv' track 1: Using the output module for the format 'AAC'.
Warning: 'D:\Video\The Cleveland Show (2009) - S02E09 - Beer Walk.mkv': A track with the ID 2 was requested but not found in the file. The corresponding option will be ignored.
The file 'D:\Video\MKVConvert\The Cleveland Show (2009) - S02E09 - Beer Walk.mkv' has been opened for writing.
The cue entries (the index) are being written...
Multiplexing took 2 seconds.
Error: Failed to process The Cleveland Show (2009) - S02E09 - Beer Walk.mkv. Please check the input file and try again.
Processing: The Cleveland Show (2009) - S03E02 - The Hurricane.mkv
mkvmerge v86.0 ('Winter') 64-bit
'D:\Video\The Cleveland Show (2009) - S03E02 - The Hurricane.mkv': Using the demultiplexer for the format 'Matroska'.
'D:\Video\The Cleveland Show (2009) - S03E02 - The Hurricane.mkv' track 0: Using the output module for the format 'HEVC/H.265'.
'D:\Video\The Cleveland Show (2009) - S03E02 - The Hurricane.mkv' track 1: Using the output module for the format 'AAC'.
Warning: 'D:\Video\The Cleveland Show (2009) - S03E02 - The Hurricane.mkv': A track with the ID 2 was requested but not found in the file. The corresponding option will be ignored.
The file 'D:\Video\MKVConvert\The Cleveland Show (2009) - S03E02 - The Hurricane.mkv' has been opened for writing.
The cue entries (the index) are being written...
Multiplexing took 2 seconds.
Error: Failed to process The Cleveland Show (2009) - S03E02 - The Hurricane.mkv. Please check the input file and try again.
Processing: The Cleveland Show (2009) - S03E16 - Frapp Attack.mkv
mkvmerge v86.0 ('Winter') 64-bit
'D:\Video\The Cleveland Show (2009) - S03E16 - Frapp Attack.mkv': Using the demultiplexer for the format 'Matroska'.
'D:\Video\The Cleveland Show (2009) - S03E16 - Frapp Attack.mkv' track 0: Using the output module for the format 'HEVC/H.265'.
'D:\Video\The Cleveland Show (2009) - S03E16 - Frapp Attack.mkv' track 1: Using the output module for the format 'AAC'.
Warning: 'D:\Video\The Cleveland Show (2009) - S03E16 - Frapp Attack.mkv': A track with the ID 2 was requested but not found in the file. The corresponding option will be ignored.
The file 'D:\Video\MKVConvert\The Cleveland Show (2009) - S03E16 - Frapp Attack.mkv' has been opened for writing.
The cue entries (the index) are being written...
Multiplexing took 2 seconds.
Error: Failed to process The Cleveland Show (2009) - S03E16 - Frapp Attack.mkv. Please check the input file and try again.
Processing: The Cleveland Show (2009) - S04E12 - Pins, Spins and Fins.mkv
mkvmerge v86.0 ('Winter') 64-bit
'D:\Video\The Cleveland Show (2009) - S04E12 - Pins, Spins and Fins.mkv': Using the demultiplexer for the format 'Matroska'.
'D:\Video\The Cleveland Show (2009) - S04E12 - Pins, Spins and Fins.mkv' track 0: Using the output module for the format 'HEVC/H.265'.
'D:\Video\The Cleveland Show (2009) - S04E12 - Pins, Spins and Fins.mkv' track 1: Using the output module for the format 'AAC'.
Warning: 'D:\Video\The Cleveland Show (2009) - S04E12 - Pins, Spins and Fins.mkv': A track with the ID 2 was requested but not found in the file. The corresponding option will be ignored.
The file 'D:\Video\MKVConvert\The Cleveland Show (2009) - S04E12 - Pins, Spins and Fins.mkv' has been opened for writing.
The cue entries (the index) are being written...
Multiplexing took 2 seconds.
Error: Failed to process The Cleveland Show (2009) - S04E12 - Pins, Spins and Fins.mkv. Please check the input file and try again.
Processing: The Cleveland Show (2009) - S04E23 - Wheel Of Family.mkv
mkvmerge v86.0 ('Winter') 64-bit
'D:\Video\The Cleveland Show (2009) - S04E23 - Wheel Of Family.mkv': Using the demultiplexer for the format 'Matroska'.
'D:\Video\The Cleveland Show (2009) - S04E23 - Wheel Of Family.mkv' track 0: Using the output module for the format 'HEVC/H.265'.
'D:\Video\The Cleveland Show (2009) - S04E23 - Wheel Of Family.mkv' track 1: Using the output module for the format 'AAC'.
Warning: 'D:\Video\The Cleveland Show (2009) - S04E23 - Wheel Of Family.mkv': A track with the ID 2 was requested but not found in the file. The corresponding option will be ignored.
The file 'D:\Video\MKVConvert\The Cleveland Show (2009) - S04E23 - Wheel Of Family.mkv' has been opened for writing.
The cue entries (the index) are being written...
Multiplexing took 2 seconds.
Error: Failed to process The Cleveland Show (2009) - S04E23 - Wheel Of Family.mkv. Please check the input file and try again.

All MKV files have been processed and saved in D:\Video\MKVConvert.
Press any key to continue . . .


Why is this happening and how can I fix it?