Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Как сравнивать размеры одних и тех же файлов в двух папках? (http://forum.oszone.net/showthread.php?t=334139)

Archy_A@twitter 04-04-2018 12:18 2806970

Как сравнивать размеры одних и тех же файлов в двух папках?
 
Добрый день, подскажите, пожалуйста.
Есть две папки, в них одни и те же файлы, но разного размера.

Надо брать файл из папки А, смотреть его размер, смотреть размер этого же файла в папке В, и если размер файла в А меньше, то мувить его в папку В, если такой же или больше - просто удалять файл в папке А и переходить к след. файлу.

Проще всего во второй папке увидеть размер другим, вложенным for, наверное.

Код:

@Echo Off

rem Папка А
set resize=C:\Desktop\i-s_images\img\games\fix

rem Папка В
set orig=C:\Desktop\i-s_images\img\games\orig

for %%F in ("%resize%\*.*") do for %%A in (%orig%\%%~nxF) do echo %%~nxF %%~zF -- %%~nxA %%~zA


Iska 04-04-2018 14:07 2806983

Archy_A@twitter, а если, несмотря на:
Цитата:

Цитата Archy_A@twitter
в них одни и те же файлы, »

окажется так, что в каталоге «Папка А» файл есть, а в каталоге «Папка В» его вообще нет — то что делать?

Цитата:

Цитата Archy_A@twitter
Проще всего во второй папке увидеть размер другим, вложенным for, »

Проще всего использовать процедуру, куда передавать полные имена файла источника, файла приёмника и использовать %~z1 и %~z2, наподобие (без каких-либо проверок):
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=C:\Мои проекты\0148\Папка А
set sDestFolder=C:\Мои проекты\0148\Папка В

for %%i in ("%sSourceFolder%\*.*") do call :Check "%%~i" "%sDestFolder%\%%~nxi"

endlocal
exit /b 0

:Check
        echo Source:    [%~1], size: [%~z1]
        echo Destination [%~2], size: [%~z2]
       
        if %~z1 lss %~z2 (
                echo Moving [%~1] into [%~dp2]
                >nul move /y "%~1" "%~dp2"
        ) else (
                echo Deleting [%~1]
                del /f /q "%~1"
        )

        exit /b 0


Archy_A@twitter 04-04-2018 14:51 2806988

Ох не сказал бы, что проще :), спасибо, а Ваш вариант реально переделать под рекурсивную проверку всех файлов в подпапках и подпапках подпапок?
С переносом, естественно, относительно правильного пути? Был бы Вам очень признателен.

У меня заработал мой вариант так, в конце концов, но рекурсию он не умеет и уметь не будет без лютых танцев :(
Код:

set resize=C:\Desktop\i-s_images\img\games\fix
set orig=C:\Desktop\i-s_images\img\games\orig

for %%F in ("%resize%\*.*") do if EXIST %orig%\%%~nxF for %%A in (%orig%\%%~nxF) do if %%~zF LSS %%~zA (
  move /Y %%F %orig%
) else (
  del /F /Q %%F
)


Iska 04-04-2018 15:15 2806995

Archy_A@twitter, Вы не ответили на вопрос:
Цитата:

Цитата Iska
окажется так, что в каталоге «Папка А» файл есть, а в каталоге «Папка В» его вообще нет — то что делать? »

Тот же вопрос и по поводу каталогов.

Archy_A@twitter 04-04-2018 15:36 2806997

Ничего. Я у себя ставлю if EXIST. По логике, его не надо ни мувить ни удалять, пусть останется, и будет видно несоответствие потом.

Archy_A@twitter 04-04-2018 18:03 2807033

В общем спасибо, забил на рекурсию и в скрипт фотошопа добавил необходимый функционал.
Спасибо за помощь in any case )

megaloman 04-04-2018 20:36 2807057

Archy_A@twitter, Что требуется? Взять все файлы в папке A и сравнить их со всеми файлами с теми же именами в папке и подпапках B? Или взять все файлы из папки и подпапок A и сравнить их со всеми файлами с теми же именами в папке и подпапках B?
Цитата:

Цитата Archy_A@twitter
С переносом, естественно, относительно правильного пути? »

Как это понять. Пример приведите с путями.

Iska 04-04-2018 23:30 2807080

megaloman, полагаю, второе:
Цитата:

Цитата megaloman
Или взять все файлы из папки и подпапок A и сравнить их со всеми файлами с теми же именами в папке и подпапках B? »



Время: 16:17.

Время: 16:17.
© OSzone.net 2001-