Если у Вас есть каталог, в котором батник и в котором папки Tmp TmpArc TmpErr TmpIn, то вот кусок кода, который надо вставить в предыдущее решение (ограничение: в папке Tmp ни на каком уровне не должно быть подпапки c совпадающим именем Tmp)
Код:

@echo off
cd /D "%~dp0"
FOR /R "Tmp\" %%f IN (*.*) DO Call :Files "%%f"
GoTo :Eof
:Files
Set TmpFtp=%1
Set TmpArc=%TmpFtp:\Tmp\=\TmpArc\%
Set TmpFtp=%~dp1
Set TmpErr=%TmpFtp:\Tmp\=\TmpErr\%
Set TmpIn=%TmpFtp:\Tmp\=\TmpIn\%
Call :CompMove %1 %TmpArc%
GoTo :Eof
далее кусок предыдущего решения
Цитата:
Второй пример работает 50/50 он оставляет файлы в папке Tmp
|
- заархиваруйте и перешлите Ваши батник и папки - вы меня заинтриговали. Похоже, у Вас нарушено моё предположение, следующее из условия: в архивной папке ОБЯЗЯТЕЛЬНО должен быть файл с тем же именем, что и в ТМП. Вот код, где файлы, которых нет в тмп, переместятся в ошибочные, как это сделано и в решении с поддиректориями
читать дальше »
Код:

@echo off
Set TmpFtp=D:\Tmp
Set TmpArc=D:\TmpArc
Set TmpErr=D:\TmpErr
Set TmpIn=D:\TmpIn
FOR %%f IN (%TmpFtp%\*.*) DO Call :CompMove "%%f" "%TmpArc%\%%~nxf"
GoTo :Eof
:CompMove
Set L=1
If Not Exist %2 Set L=0
If %L% EQU 1 If Not %~z1==%~z2 Set L=0
If %L% EQU 0 (
Move /Y %1 "%TmpErr%\" >nul
GoTo :Eof
)
fc /B %1 %2 >nul
If %ErrorLevel%==0 (
Move /Y %1 "%TmpIn%\" >nul
) Else (
Move /Y %1 "%TmpErr%\" >nul
)