@Echo Off
Set WD=%~1
Set BIN=BIN
Set IN=CP1251
Set OUT=UTF-16LE
Call :SetChcp
Chcp 1251 >nul
Echo.

Echo    %~1
::   
If Exist Temp\Log\Before (
Set After=Temp\Log\After
Set Before=Temp\Log\Before
) Else (
Set After=Z-Del_Files\After
Set Before=Z-Del_Files\Before
)
If Not Exist %After% MD %After%
If Not Exist %After%\..\Addons MD %After%\..\Addons
If Exist "%WD%\Backup" RD /S /Q "%WD%\Backup"
MD "%WD%\Backup"
If Exist "%WD%\Logs" RD /S /Q "%WD%\Logs"
MD "%WD%\Logs"
If Exist "%WD%\Out" RD /S /Q "%WD%\Out"
MD "%WD%\Out"
If Exist "%WD%\Temp" RD /S /Q "%WD%\Temp"
MD "%WD%\Temp"

::       Backup
Dir %Before%\* /B /ON>"%WD%\Files_List"
For /F "Delims=" %%I In (%WD%\Files_List) Do Call :CopyFiles %%~I
For /F "Delims=" %%I In (%WD%\BlockFiles) Do Call :DelFiles %%~I

::    
If Exist "%WD%\PackFiles" Del "%WD%\PackFiles">nul
For /F "UseBackQ Delims=" %%I In (`Dir "%WD%\Backup\*.??_" /B /ON 2^>nul`) Do Echo %%~I>>"%WD%\PackFiles"

::      
If Exist "%WD%\PackFiles" (
   Echo ᯠ 㯠 䠩  㤠 ਣ
   For /F "Delims=" %%I In (%WD%\PackFiles) Do (
     Expand -r "%WD%\Backup\%%~I" "%WD%\Backup\\">nul
     Del "%WD%\Backup\%%~I">nul
   )
)

::    Files_List     Files_List
Dir %WD%\Backup\* /B /ON>"%WD%\Files_List"
Call :TypeString Log_file.log
Echo  >>"%WD%\Logs\Log_file.log"
Call :TypeString Log_file.log
For /F "Delims=" %%I In (%WD%\Files_List) Do (
   Echo ⪠ 䠩 	%%~I
   If Exist "%WD%\Backup\%%~I" (
     Type %WD%\Backup\%%~I>%WD%\Temp\%%~I
     "%WD%\InfClean.exe" "%WD%\Temp\%%~I">nul
     Echo %%~I   	>>"%WD%\Logs\Log_file.log"
   ) Else (
     Call :NotFiles %%~I
   )
)

::    Unicode  Files_UTF
XCopy "%WD%\Temp\*.*" "%WD%\Out\" /Q /R /Y>nul
Call :TypeString Log_file.log
Echo    Unicode>>"%WD%\Logs\Log_file.log"
Call :TypeString Log_file.log
For /F "Delims=" %%I In (%WD%\Files_UTF) Do (
   If Exist "%WD%\Out\%%~I" (
     Echo ८ࠧ  %%~I   	 Unicode [%OUT%]
     Copy /Y "%WD%\_BOM" "%WD%\Out\%%~I">nul
     %BIN%\Iconv.exe -f %IN% -t %OUT% "%WD%\Temp\%%~I">>"%WD%\Out\%%~I"
     Echo %%~I   	   %OUT%>>"%WD%\Logs\Log_file.log"
   )
)

::      
If Exist "%WD%\PackFiles" (
   Echo  䠩
   For /F "UseBackQ Delims=" %%I In (`Dir "%WD%\Temp" /B /ON 2^>nul`) Do Call :PackFiles %%~I
)

Echo ஢ 䠩  㤠 ६ 
::   
XCopy "%WD%\Out\*.*" "%I386%\" /Q /R /Y>nul
XCopy "%WD%\Out\*.*" %After%\ /Q /R /Y>nul
Copy /Y "%WD%\Logs\Log_file.log" %After%\..\%~1.log>nul
If Exist "%WD%\Logs\!Errors.log" Copy /Y "%WD%\Logs\!Errors.log" %After%\..\%~1_Errors.log>nul

::     
If Exist "%WD%\Temp" RD /S /Q "%WD%\Temp"
If Exist "%WD%\PackFiles" Del "%WD%\PackFiles">nul

Echo 믮  %~1 襭!
Echo.
Chcp %Chcp% >nul
GoTo :EOF

:CopyFiles
::  
Set I=%~1
If Exist "%I386%\%I:~0,-1%?" Copy "%I386%\%I:~0,-1%?" "%WD%\Backup\">nul
Goto :EOF

:DelFiles
::  
Set I=%~1
If Exist "%WD%\Backup\%I:~0,-1%?" Del /F /Q "%WD%\Backup\%I:~0,-1%?"
Goto :EOF

:NotFiles
::   -   
Set I=%~1
If Not Exist "%WD%\Temp\%I%" (
   Echo.
   Echo   %I%    	   ࠡ祩 !
   Echo ,  䠩  㤠   ⥣樨
   Echo ஢ ᯨ᪨ 㤠 DelOC.lst, DelDrv.lst  䠩 Finish 
   Echo   %I%    	    !>>"%WD%\Logs\!Errors.log"
   Echo ,       .>>"%WD%\Logs\!Errors.log"
   Echo    DelOC.lst, DelDrv.lst   Finish .>>"%WD%\Logs\!Errors.log"
   Echo.
   Call :TypeString !Errors.log
)
Goto :EOF

:PackFiles
::  
Set I=%~1
For /F "Delims=" %%J In (%WD%\PackFiles) Do If /I %%~J==%I:~0,-1%_ (
   MakeCab /D CompressionMemory=21 /D CompressionType=LZX /L "%WD%\Out" "%WD%\Out\%I%" %I:~0,-1%_>nul
   Del /F /Q "%WD%\Out\%I%">nul
)
Goto :EOF

:TypeString
Set I=%~1
Echo ------------------------------------------------------------------------------->>"%WD%\Logs\%I%"
Goto :EOF

:SetChcp
  For /F "Tokens=2 Delims=:" %%I In ('Chcp') Do (
    Set Chcp=%%I
  )
GoTo :EOF
