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

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

invisibleon 10-10-2012 14:12 2002702

BAT файлом сравнить ряд файлов по размеру - если общий размер сходится удалить
 
Здравствуйте.

Есть папка C:\1\
Внутри неё папка C:\1\2\

В папке 2 есть файл A.ZIP. Внутри него файлы:
1.txt
2.txt
3.txt
4.txt

В папке '1' имеются так же файлы:
1.txt
2.txt
3.txt
4.txt

Необходимо бат файлом сравнить общий размер файлов в архиве 'A.zip' и в папке '1'. Если общий размер файлов сходится - удалить txt файлы в папке 1. Если размер не сошёлся - не удалять. Поможете реализовать? Спасибо!

Постскриптум: сейчас вручную открываю архив в TC, смотрю общий размер файлов в архиве и сравниваю с размером файлов в папке - если сходится, файлы из папки удаляются.

gora 10-10-2012 15:10 2002747

Попробуйте так:
Код:

@Echo Off
Set FoldTXT=e:\Temp\1
Set Arch=e:\Temp\1\2\A.ZIP

For /R "%FoldTXT%" %%i In (*.txt) Do Set /a size +=%%~zi
For /F %%i In ('""C:\Program Files\7-zip\7z.exe" l "%Arch%""') Do Set sizeArch=%%i
If "%size%"=="%sizeArch%" Del /Q /F "%FoldTXT%\*.txt"

Пути укажите свои

invisibleon 10-10-2012 15:37 2002772

Спасибо - но почему-то не срабатывает чистка. Пути проверил, 7z.exe есть ...

неправильно размер текстовых файлов определяется - а 7z правильно размер определил....

gora 10-10-2012 15:46 2002776

Цитата:

Цитата invisibleon
неправильно размер текстовых файлов определяется »

В папке 1 нет подпапок в которых присутствуют файлы .txt ? Ибо на это не расчитывалось и первый цикл считает размер ВСЕХ .txt файлов в папке 1 и во вложенных в нее папках.

invisibleon 10-10-2012 15:48 2002779

Есть. Можно как-то ограничить только по папке 1 без вложенных папок?

спасибо большое

gora 10-10-2012 15:51 2002783

Замените строку первого цикла на приведенную ниже:
Код:

For %%i In ("%FoldTXT%\*.txt") Do Set /a size +=%%~zi

invisibleon 10-10-2012 15:57 2002789

gora спасибо большое.

У меня последний вопрос (как обычно приходит в голову опосля).

А что, если в "папке 2" у меня несколько архивов - можно сделать условие такое:

1) Проверить даты создания архивов - определить самый последний созданный архив
2) Сверху размеров производить только с последним созданным архивом?


___________
Если нельзя как-то определить последний созданный архив - можно подсказать проверку размера по всем архивам, что правда не совсем желательно - так как это займёт немного дольше времени...

Спасибо!

gora 10-10-2012 16:24 2002817

Проверяйте:
Код:

@Echo Off
SetLocal EnableDelayedExpansion
Set FoldTXT=e:\Temp\1
Set Arch=e:\Temp\1\2

Set tmax=
For %%i In ("%Arch%\*.zip") Do (
        Set tm=%%~ti
        Set tm=!tm:~8,2!!tm:~3,2!!tm:~0,2!!tm:~11,2!!tm:~14,2!
        If !tm! GTR !tmax! Set tmax=!tm!& Set namArch=%%~nxi
)
For %%i In ("%FoldTXT%\*.txt") Do Set /a size +=%%~zi
For /F %%i In ('""C:\Program Files\7-zip\7z.exe" l "%Arch%\%namArch%""') Do Set sizeArch=%%i
Echo %namArch%        %tmax%
If "%size%"=="%sizeArch%" (Echo %size% equal %sizeArch%) Else Echo %size% NOT equal %sizeArch%
Pause>Nul

Ограничение: даты архивов ограничены 2000 годом, с более старыми батник работать не будет.

invisibleon 10-10-2012 18:09 2002895

Цитата:

Цитата gora
Ограничение: даты архивов ограничены 2000 годом, с более старыми батник работать не будет. »

У меня множество архивов с разной датой (но не старее 2000 года) - почему то берёт архив от сентября, тогда как "моложе" его ещё 20-30 архивов...
В чём может быть проблема?

gora 10-10-2012 18:46 2002910

Цитата:

Цитата invisibleon
В чём может быть проблема? »

1 Вставьте строку в цикл обработки папки с архивами:
Код:

        Echo %%~ti
Запустите батник, весь вывод в консоль скопируйте и выложите здесь.
2 Какая ОС?

invisibleon 10-10-2012 18:50 2002914

Вложений: 1
echo %%~ti почему-то переменную не выводит

win 2000 server

invisibleon 10-10-2012 18:52 2002916

не туда эхо вставлял. Вывел полностью список всех файлов с датами (всё правильно) - но почему-то не берёт последний, а берёт откуда-то из середины. При этом скрипт на других схожих папках прошёлся успешно, а на одной встрял =/

gora 10-10-2012 19:15 2002930

У Вас так:
Цитата:

26.06.12 15:34
У меня так:
Цитата:

01.08.2009 16:17
У Вас в системе формат даты выбран dd.MM.yy, измените его на dd.MM.yyyy иначе под Вас придется переписывать батник.

invisibleon 11-10-2012 17:26 2003554

Цитата:

Цитата gora
У меня так:
Цитата:
01.08.2009 16:17 »

Добрый вечер - проверил, short date format у меня выставлен dd.MM.yyyy

invisibleon 11-10-2012 18:11 2003589

gora, а можно батник под мою дату поменять?

Спасибо.

gora 12-10-2012 08:20 2003938

Цитата:

Цитата invisibleon
можно батник под мою дату поменять? »

Можно. Замените строку:
Код:

Set tm=!tm:~8,2!!tm:~3,2!!tm:~0,2!!tm:~11,2!!tm:~14,2!
на строку:
Код:

Set tm=!tm:~6,2!!tm:~3,2!!tm:~0,2!!tm:~9,2!!tm:~12,2!

invisibleon 12-10-2012 08:55 2003948

gora, ты бог cmd =) спасибо)

p.s.: нашёл кучу упоминаний про тебя на других форумах пока похожие проблемы искал :) Типа "гора с озона и его метод" :)


Время: 21:28.

Время: 21:28.
© OSzone.net 2001-