![]() |
получить размер каталога с подкаталогами
подскажите, возможно ли это и как?
|
Команда Diruse (Diruse Examples).
Файл Diruse.exe можно взять из установочного CD \Support\Tools\suptools.msi (support.cab). |
Код:
@Echo Off |
gora, Вариант хороший, но не мой случай, у меня задан набор каталогов, но способ оригинальный :)
Petya V4sechkin, Большое спасибо за подсказку. |
gora, Большое спасибо. Немного добавил и получил еще и кол-во файлов:
Код:
@Echo Off |
Цитата:
|
Цитата:
Код:
@Echo Off |
Если кому не сложно помогите разобраться в этом коде
Код:
For /F "skip=4 tokens=1-3" %%a IN ('Dir "%DirProg%" /-C /S /A:-D') Do ( Заранее благодарен |
Цитата:
Код:
Dir "%DirProg%" /-C /S /A:-D Можете запустить эту команду отдельно и увидите ее вывод примерно такой: Код:
Том в устройстве C не имеет метки. skip=4 пропускаем первые 4 строки, т.к., в них не может быть нужной информации tokens=1-3 каждую строку разбиваем на части по разделителям (они не определены, значит используются по умолчанию символы пробела и табуляции) и первые три части строки записываем в переменные (%%a, %%b и %%c). В теле цикла ищем нужную строку, содержащую общий размер директории (это вторая снизу строка вывода). Код:
If !flag!==1 Set dirsize=%%c Это слово появится только когда цикл дойдет до третьей с конца строки. В этом случае переменной flag будет присвоено значение 1. При обработке следующей строки вывода (предпоследняя строка) команда Код:
If !flag!==1 Set dirsize=%%c Код:
If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0) |
Есть скрипт для удаления временных файлов. Подскажите, как его дополнить, чтобы получить общую сумму удалённых файлов, в мегабайтах до десятых.
Код:
|
Не знаю, как посчитать сумму удаляемых файлов в корзинах. С остальным вроде бы разобрался, но как то коряво получилось.
|
помогите с циклом
Код:
@Echo Off |
Код:
@Echo Off |
Цитата:
|
С условием поиска не получается. Не могу прикрутить if exist. Опять сложный для меня цикл.
Код:
@Echo Off |
sov44, не удаляйте посты! Мой пост 14 выглядит как-то глупо, не находите?
Цитата:
Код:
@Echo Off |
Цитата:
Цитата:
Код:
@Echo Off |
Цитата:
Код:
@echo off |
Сейчас делаю проверку по условию наличия программы. Если есть программа, то считается размер кеша и чистит его, если нет, то ничего не считает и выводит сообщение с прочерками. Столкнулся с непонятным:
При установленной Опере если Код:
%programfiles%\Opera Код:
@Echo Off |
sov44
Кавычки для путей с пробелами здесь обязательны. Переменные присваиваемые/изменяемые в блоке (скобки при проверке условия) далее в блоке нужно заключать в восклицательные знаки, а не в проценты, иначе их значение будет таким же как до входа в блок. Оперы у меня нет, проверял на кеше IE в win7 : Код:
@Echo Off Код:
Set kb=1024 |
Из письма в ПМ:
Цитата:
Во-первых, у Вас в приложенном к письму пакетном файле две одинаковых метки «:CalcAndDel». Во-вторых, есть лишние «endlocal», которые могут вести к некорректным подсчётам (не проверялось). В-третьих, пакетный файл зацикливается оттого, что Вы сами так слепили его: Можно попробовать так: |
упс.. действительно проглядел m1
Iska, нужна такая структура, чтобы каждый цикл обрабатывался самостоятельно. Иными словами два независимых скрипта в одном теле. (между этими скриптами планируется вставить другие скрипты) Изменил goto m1 на goto m2, цикл вышел из бесконечности. Надеюсь это решит проблему :) |
gora, поясните пожалуйста часть скрипта (пост 7), какой смысл прибавления к dirsize нуля и дальнейшего сравнения %dirsizeT%" и %dirsize%? Какие есть ограничения по размеру обработки командного файла?
Код:
For /F "skip=4 tokens=1-3" %%a IN ('Dir "%DirProg%" /-C /S /A:-D') Do ( |
Цитата:
2 Максимальное значение число для арифметики в CMD = 2^31 - 1 (2147483647) |
Снова нужна помощь по скрипту
Код:
@Echo Off Второй день экспериментирую и не могу понять, почему размер корзины при переборе 2147483647 получается со знаком минус и не появляется сообщение "Количество временных файлов велико для обработки" . Хелп! !!! |
Цитата:
|
Цитата:
Вы пытаетесь проверить результат сложения двух и более чисел. В этом случае каждое из слагаемых может быть меньше 2147483647, но сумма уже может быть больше указанного числа. При этом число становится отрицательным. Можно попробовать слагаемые проверять и сразу превращать в КБ или МБ и уже затем складывать. Точность конечно снижается, но другого варианта счета в CMD таких больших чисел я не знаю. |
Цитата:
|
amel27, покажите,как отредактировать скрипт поста 25 с учетом этой инфы?
|
sov44, не совсем понимаю, зачем нужна такая точность, по мне так вполне хватило бы обычного округления до Mb. Разве только из спортивного интереса. Для заявленных в скрипте требований понадобится аж три дополнительных ф-ции:
- сложения двойных чисел (для суммирования объема по всем дискам); - последовательного деления на 2 (для преобразования byte -> Kb -> Mb); - последовательного умножения на 2 (для вычисления остатка при округлении) P.S. подсвеченную строку отредактировал, т.к. не понял её смысл в оригинале |
Цитата:
Цитата:
|
В одном из первых постов gora пишет про то что нужно включить кодировку.... Как это сделать? Оо
|
FiFallcon, попробуй в Notepad: файл - сохранить как - кодировка:866
или строка в тексте скрипта: chcp 866 |
Цитата:
|
Цитата:
amel27, при повторном запуске скрипта (пост 30) выскакивает ошибка. |
sov44, Вы ж не первый день здесь: какая именно ошибка (точное сообщение), на какой команде…
|
Цитата:
|
Цитата:
|
Хочу прикрутить к скрипту (пост 30) проверку на наличие папки RECYCLER
Код:
FOR %%d IN (Z Y X W U V T S R Q P O N M L K J I H G F E D C) DO IF NOT EXIST %%d:\RECYCLER goto m3 |
Цитата:
|
Цитата:
|
sov44, ошибка была при наличии пустых папок - исправил
по поводу скринов 1-2 была тема: CMD/BAT - [решено] Составление списка существуюих дисков + отсев дисков не имеющих ФС так будет выглядеть начало скрипта со сканированием через WMIC: |
amel27, нужна помощь в правке скрипта (финальный кусок). Какая-то ошибка, вместо размера в 0,3 Мб, отражается размер 3000,0 Мб. Не могу разобраться в математике.
|
sov44, что-то не так с примером - для 10 байт (CNT=10) никогда не будет 0,3 Mb
|
sov44,
Можно с помощью du, мне кажется короче: Код:
@echo off Код:
@echo off |
amel27, как я уже написал, это кусок скрипта, в котором cnt накопительная байтов от очистки временных файлов. Значение 10 взято условно. :)
Прошу проверить только математику. |
sov44, не уверен, что проблема только в "математике", для проверки мне нужно воспроизвести у себя ошибку, т.е. нужно знать версию Windows и состояние всех переменных окружения перед входом в блок, для чего достаточно вставить команду вывода значений переменных в файл:
Код:
SET>set.log |
amel27, операционная система Windows XP SP3, полный лог и сам батник во вложении.
|
Цитата:
Код:
437460 байт CNT до чистки корзины |
amel27, батник запускался на компьютере родственников. ( за 150 км от постоянного места дислокации :) ) Лог писался там-же. Вернулся домой, этот-же батник, в такой-же винде работает правильно. Косяк не скрипта, сорри. :blush2:
|
Немного изменил батник, чтобы путём перебора заданных папок считал размер и удалял содержимое ЭТИХ папок. В итоге скрипт удаляет сами папки и рядом лежащие. Подскажите, где ошибка?
Код:
SetLocal enabledelayedexpansion |
Столько дней без ответа!!!! Профи, не игнорируйте новичков!!!
|
Нужна помощь в отладке скрипта получения размера содержимого папки Temp, за исключением определённых файлов и папки.
Код:
@Echo Off |
Цитата:
|
Цитата:
Код:
@Echo Off |
Нужна помощь в выявлении конфликта между двумя блоками в bat. Каждый блок по отдельности работает как надо, однако при их объединении второй блок не срабатывает.
Не обработка второго блока происходит в случае принудительного завершения процесса winword.exe первым блоком. |
Ни у кого нет идей, почему не запускается WMIC во втором блоке при принудительном завершении процесса winword.exe? :durak:
|
Цитата:
|
Цитата:
|
sov44, да уж, не ожидал. Похоже чудит find/findstr при использовании оператора piping (|). Уберите красное:
Код:
tasklist 2>nul|find /i "winword.exe" 1>nul 2>nul |
Цитата:
Вот только как убрать вывод вывод в консоль путей временных файлов. Если не ошибаюсь, именно эти ошибки и убирала 2>nul В консоли кроме размеров удаляемых файлов ничего не должно быть. |
|
Цитата:
El Sanchez, ещё раз спасибо, проблема решена! |
Оптимизированный метод на несколько порядков быстрее работает, особенно при большом количестве файлов!!!
set DIR="c:\windows" ... dir %DIR% /-C /S /A:-D > %TEMP%\csm_fs.tmp type %TEMP%\csm_fs.tmp | find /V /C "" > %TEMP%\csm_fsn.tmp set /p {file_size}num=<%TEMP%\csm_fsn.tmp if "%{files_size}num%"=="2" goto end set /a {file_size}num-=2 for /f "tokens=1-3" %%i in ('type %TEMP%\csm_fs.tmp ^| more +%{file_size}num%') do set SIZE=%%k& goto end ... :end del /q %TEMP%\csm_fs.tmp del /q %TEMP%\csm_fsn.tmp exit /B --- Собственно результ в SIZE. А принцип работы - "обрезания" строк в файле до нужной. И разбор этой строки сразу. |
Здравствуйте!
Понимаю, что тема старая, но, возможно, вы сможете подсказать, как быть в ситуации, когда суммарный размер файлов превышает 4ГБ? В байтах он его определяет корректно, а вот перевод в Кб, Мб и ГБ корректно не отрабатывает (видимо, т.к. числа близки к пределу CMD или же ручки кривые). Как можно решить эту проблему? Большое спасибо! |
Время: 07:53. |
Время: 07:53.
© OSzone.net 2001-