PDA

Показать полную графическую версию : BAT файлом сравнить ряд файлов по размеру - если общий размер сходится удалить


invisibleon
10-10-2012, 14:12
Здравствуйте.

Есть папка 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
Попробуйте так:
@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
Спасибо - но почему-то не срабатывает чистка. Пути проверил, 7z.exe есть ...

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

gora
10-10-2012, 15:46
неправильно размер текстовых файлов определяется »
В папке 1 нет подпапок в которых присутствуют файлы .txt ? Ибо на это не расчитывалось и первый цикл считает размер ВСЕХ .txt файлов в папке 1 и во вложенных в нее папках.

invisibleon
10-10-2012, 15:48
Есть. Можно как-то ограничить только по папке 1 без вложенных папок?

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

gora
10-10-2012, 15:51
Замените строку первого цикла на приведенную ниже:For %%i In ("%FoldTXT%\*.txt") Do Set /a size +=%%~zi

invisibleon
10-10-2012, 15:57
gora спасибо большое.

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

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

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


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

Спасибо!

gora
10-10-2012, 16:24
Проверяйте:@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
Ограничение: даты архивов ограничены 2000 годом, с более старыми батник работать не будет. »

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

gora
10-10-2012, 18:46
В чём может быть проблема? »
1 Вставьте строку в цикл обработки папки с архивами:
Echo %%~ti Запустите батник, весь вывод в консоль скопируйте и выложите здесь.
2 Какая ОС?

invisibleon
10-10-2012, 18:50
echo %%~ti почему-то переменную не выводит

win 2000 server

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

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

invisibleon
11-10-2012, 17:26
У меня так:
Цитата:
01.08.2009 16:17 »

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

invisibleon
11-10-2012, 18:11
gora, а можно батник под мою дату поменять?

Спасибо.

gora
12-10-2012, 08:20
можно батник под мою дату поменять? »
Можно. Замените строку: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
gora, ты бог cmd =) спасибо)

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




© OSzone.net 2001-2012