Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 2732
Благодарности: 1698

Профиль | Отправить PM | Цитировать


Если у Вас есть каталог, в котором батник и в котором папки 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
)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 16-02-2013 в 18:42.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:08, 16-02-2013 | #17