Показать полную графическую версию : Как сравнивать размеры одних и тех же файлов в двух папках?
Archy_A@twitter
04-04-2018, 12:18
Добрый день, подскажите, пожалуйста.
Есть две папки, в них одни и те же файлы, но разного размера.
Надо брать файл из папки А, смотреть его размер, смотреть размер этого же файла в папке В, и если размер файла в А меньше, то мувить его в папку В, если такой же или больше - просто удалять файл в папке А и переходить к след. файлу.
Проще всего во второй папке увидеть размер другим, вложенным 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
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
Ох не сказал бы, что проще :), спасибо, а Ваш вариант реально переделать под рекурсивную проверку всех файлов в подпапках и подпапках подпапок?
С переносом, естественно, относительно правильного пути? Был бы Вам очень признателен.
У меня заработал мой вариант так, в конце концов, но рекурсию он не умеет и уметь не будет без лютых танцев :(
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
)
Archy_A@twitter, Вы не ответили на вопрос:
окажется так, что в каталоге «Папка А» файл есть, а в каталоге «Папка В» его вообще нет — то что делать? »
Тот же вопрос и по поводу каталогов.
Archy_A@twitter
04-04-2018, 15:36
Ничего. Я у себя ставлю if EXIST. По логике, его не надо ни мувить ни удалять, пусть останется, и будет видно несоответствие потом.
Archy_A@twitter
04-04-2018, 18:03
В общем спасибо, забил на рекурсию и в скрипт фотошопа добавил необходимый функционал.
Спасибо за помощь in any case )
megaloman
04-04-2018, 20:36
Archy_A@twitter, Что требуется? Взять все файлы в папке A и сравнить их со всеми файлами с теми же именами в папке и подпапках B? Или взять все файлы из папки и подпапок A и сравнить их со всеми файлами с теми же именами в папке и подпапках B?С переносом, естественно, относительно правильного пути? » Как это понять. Пример приведите с путями.
megaloman, полагаю, второе:
Или взять все файлы из папки и подпапок A и сравнить их со всеми файлами с теми же именами в папке и подпапках B? »
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.