Я не понимаю цель вашего кода.Каждый раз, когда вы копируете в big.txt, вы перезаписываете предыдущую копию.Я думаю, что вы хотите добавить вместо этого.
Я не уверен, если вы хотите начать с пустого big.txt и big.xml.Я предполагаю, что вы делаете.
Кроме того, ваш вопрос подразумевает, что исходные текстовые файлы могут иметь более 3 символов в имени, даже если в вашем примере их ровно 3. Я предполагаю, что вы хотите поддерживать более3.
Если я вас правильно понимаю, я думаю, что это будет работать (не проверено) Редактировать - внесены изменения в ответ на комментарии Андрея М относительно начального setlocal и избегания самостоятельного копирования big.txt
@echo off
setlocal disableDelayedExpansion
if "%~1"=="" echo Give me a directory&exit /b
set "root=%~1"
if exist "%root%\A\big.txt" del "%root%\A\big.txt"
if exist "%root%\B\big.xml" del "%root%\B\big.xml"
for /f "delims=" %%F in ('dir /b "%root%\A\*.txt"') do (
type "%root%\A\%%~F" >>"%root%\A\big.txt"
set "prefix=%%~nF"
setlocal enableDelayedExpansion
type "!root!\B\!prefix:~0,3!*.xml" >>"!root!\B\big.xml"
endlocal
)
Переключение отложенного расширения в цикле необходимо только в том случае, если !
появляется в любом из путей.Поскольку это маловероятно, вы, вероятно, можете начать с отложенного расширения и сбросить переключение.