Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] получить размер каталога с подкаталогами

Ответить
Настройки темы
CMD/BAT - [решено] получить размер каталога с подкаталогами

Аватара для Loki3D

Старожил


Сообщения: 362
Благодарности: 12

Профиль | Отправить PM | Цитировать


подскажите, возможно ли это и как?

-------
sory 4 my rus


Отправлено: 15:15, 27-11-2009

 

Ветеран


Сообщения: 2205
Благодарности: 730

Профиль | Отправить PM | Цитировать


Немного изменил батник, чтобы путём перебора заданных папок считал размер и удалял содержимое ЭТИХ папок. В итоге скрипт удаляет сами папки и рядом лежащие. Подскажите, где ошибка?
Код: Выделить весь код
SetLocal enabledelayedexpansion

call :OperaDel cache
call :OperaDel temporary_downloads
pause

:OperaDel
Set DirProg=%USERPROFILE%\Local Settings\Application Data\Opera\opera\%1

For /F "skip=4 tokens=1-3" %%a IN ('Dir "%DirProg%" /-C /S ') Do (
	If !flag!==1 Set dirsize1=%%c
	If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
      )
Set /A Cnt +=dirsize1
PUSHD "%DirProg%"
2>Nul RD /S/Q "%DirProg%"
POPD
echo    Очистка временных файлов Opera                - OK   %Cnt%

Отправлено: 17:54, 09-10-2011 | #51



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 2205
Благодарности: 730

Профиль | Отправить PM | Цитировать


Столько дней без ответа!!!! Профи, не игнорируйте новичков!!!

Отправлено: 19:59, 17-10-2011 | #52


Ветеран


Сообщения: 2205
Благодарности: 730

Профиль | Отправить PM | Цитировать


Нужна помощь в отладке скрипта получения размера содержимого папки Temp, за исключением определённых файлов и папки.
Код: Выделить весь код
@Echo Off
SetLocal enabledelayedexpansion

Set DirProg=%WinDir%\TEMP
For /f %%I In ('dir/b/od "%DirProg%"') Do (
           if not "%%~nxI"=="kls1EE8.tmp" (
           if not "%%~nxI"=="kls1444444EE8.tmp" (
           if not "%%~nxI"=="VBE" (
        For /F "skip=4 tokens=1-3" %%a IN ('Dir "%DirProg%" /-C /S') Do (
        If !flag!==1 Set dirsize=%%c
	If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
	)
        Set /A Cnt +=%dirsize%
	)))
)
Echo %Cnt%
pause

Отправлено: 12:53, 08-11-2011 | #53


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата sov44:
Нужна помощь в отладке скрипта получения размера содержимого папки Temp, за исключением определённых файлов и папки. »
И в чём она (помощь) должна состоять?

Отправлено: 15:34, 08-11-2011 | #54


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


Цитата sov44:
получения размера содержимого папки Temp, за исключением определённых файлов и папки. »
Код: Выделить весь код
@Echo Off
SetLocal enabledelayedexpansion
Set DirProg=%WinDir%\TEMP

Call :_DirSize "%DirProg%"
Set /A AllSize +=dirsize
Echo %AllSize%
Call :_DirSize "%DirProg%\VBE"
Set /A AllSize -=dirsize
Echo %AllSize%
For %%i In ("%DirProg%\kls1EE8.tmp" "%DirProg%\kls1444444EE8.tmp") Do If Exist %%i Set /A AllSize -= %%~zi
Echo %AllSize%
Pause>nul

:_DirSize
Set dirsize=0
For /F "skip=4 tokens=1-3" %%a IN ('Dir "%~1" /-C /S /A:-D  2^>nul') Do (
	If !flag!==1 Set dirsize=%%c
	If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
)
GoTo :EOF

Последний раз редактировалось gora, 09-11-2011 в 12:52.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:36, 08-11-2011 | #55


Ветеран


Сообщения: 2205
Благодарности: 730

Профиль | Отправить PM | Цитировать


Нужна помощь в выявлении конфликта между двумя блоками в bat. Каждый блок по отдельности работает как надо, однако при их объединении второй блок не срабатывает.
Не обработка второго блока происходит в случае принудительного завершения процесса winword.exe первым блоком.
читать дальше »

Код: Выделить весь код
@Echo Off
SetLocal enabledelayedexpansion
 
set iSumT=0
 
set "dr=%USERPROFILE%\Recent"& call :Calc "%dr%" lnk
set "dr=%USERPROFILE%\Application Data\Microsoft\Office\Последние файлы"& call :Calc "%dr%" lnk
set "dr=%USERPROFILE%\Local Settings\Temporary Internet Files\Content.MSO"& call :Calc "%dr%" *
set "dr=%USERPROFILE%\Local Settings\Temporary Internet Files\Content.Word"& call :Calc "%dr%" *
Set /A Cnt +=%iSumT%
goto :x1
 
:Calc
for /f "delims=*" %%i in ('dir /b/a-d "%dr%\*.%2" 2^>nul') do (
set "bg=%%i"
if "!bg:~0,1!"=="~" (
    >"%temp%\MsgBox.vbs" echo WScript.Quit^(MsgBox^(WScript.Arguments^(1^) ^& vbCrLf ^& WScript.Arguments^(2^) ^& vbCrLf ^& vbCrLf ^& WScript.Arguments^(3^), vbYesNo+vbDefaultButton1,WScript.Arguments^(0^)^)^)
    tasklist 2>nul|find /i "winword.exe" 1>nul 2>nul && (WScript "%temp%\MsgBox.vbs" "Внимание" "     Для успешной работы скрипта" "закройте все документы Word" "            Документы закрыты?")
    tasklist 2>nul|find /i "winword.exe" 1>nul 2>nul && (WScript "%temp%\MsgBox.vbs" "Внимание" "                           Документы Word не закрыты^!" "После нажатия на кнопку они будут закрыты принудительно" "                                         Продолжить?"& taskkill /F /IM winword.exe 1>nul 2>nul)
        )
    del /q "%temp%\MsgBox.vbs" 2>nul
    if exist "%dr%\!bg!" (              
        for %%a in ("%dr%\!bg!" ) do (
                 set /a iSumT += %%~za
                 del /f/q %%a 2>nul
                 ))
    )
exit /b 0
 
rem -------------------------------------------------------------------------
 
:x1
set dirsize4=0
For /F "UseBackQ" %%d In (
`WMIC LogicalDisk Where "FileSystem LIKE '_%%'" Get Caption^|Find ":"`) do (
 Set "DirProg=%%d\RECYCLER"& Set "flag=0"
 If EXIST !DirProg! (For /F "Skip=4 Tokens=1-3" %%a In ('DIR/-C/S/A:-D "!DirProg!"2^>Nul') Do (
      If !flag!==1 Set dirsize4=%%c
      If "%%b"=="файлов:" (Set flag=1) Else Set flag=0)
 )
   )
Set rst=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches
REG Add "%rst%\Recycle Bin" /v StateFlags0001 /t REG_DWORD /d 2 /f >nul
REG Delete "%rst%\Compress old files" /f 2>nul
Cleanmgr /sagerun:1
 
echo Cnt=%Cnt%
echo dirsize4=%dirsize4%
Set /A Cnt +=dirsize4
 
echo  summ_Cnt=%Cnt%
pause

Последний раз редактировалось sov44, 30-11-2011 в 10:17. Причина: скрыл код


Отправлено: 11:30, 28-11-2011 | #56


Ветеран


Сообщения: 2205
Благодарности: 730

Профиль | Отправить PM | Цитировать


Ни у кого нет идей, почему не запускается WMIC во втором блоке при принудительном завершении процесса winword.exe?

Последний раз редактировалось sov44, 29-11-2011 в 11:16.


Отправлено: 21:54, 28-11-2011 | #57


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1274
Благодарности: 1030

Профиль | Отправить PM | Цитировать


Цитата sov44:
Ни у кого нет идей, почему не запускается WMIC во втором блоке при принудительном завершении процесса winword.exe »
sov44, частый вызов tasklist в цикле вешает WMI
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:14, 29-11-2011 | #58


Ветеран


Сообщения: 2205
Благодарности: 730

Профиль | Отправить PM | Цитировать


Цитата El Sanchez:
частый вызов tasklist в цикле вешает WMI »
Вытащил tasklist из цикла, всё равно второй блок не запускается.
читать дальше »

Код: Выделить весь код
@Echo Off
SetLocal enabledelayedexpansion
 
set iSumT=0

  >"%temp%\MsgBox.vbs" echo WScript.Quit^(MsgBox^(WScript.Arguments^(1^) ^& vbCrLf ^& WScript.Arguments^(2^) ^& vbCrLf ^& vbCrLf ^& WScript.Arguments^(3^), vbYesNo+vbDefaultButton1,WScript.Arguments^(0^)^)^)
    tasklist 2>nul|find /i "winword.exe" 1>nul 2>nul && (WScript "%temp%\MsgBox.vbs" "Внимание" "     Для успешной работы скрипта закройте все документы Word" "После нажатия на кнопку они будут закрыты принудительно" "                                         Продолжить?"& taskkill /F /IM winword.exe 1>nul 2>nul)
    del /q "%temp%\MsgBox.vbs" 2>nul
 
set "dr=%USERPROFILE%\Recent"& call :Calc "%dr%" lnk
set "dr=%USERPROFILE%\Application Data\Microsoft\Office\Последние файлы"& call :Calc "%dr%" lnk
set "dr=%USERPROFILE%\Local Settings\Temporary Internet Files\Content.MSO"& call :Calc "%dr%" *
set "dr=%USERPROFILE%\Local Settings\Temporary Internet Files\Content.Word"& call :Calc "%dr%" *
Set /A Cnt +=%iSumT%
goto :x1
 
:Calc
for /f "delims=*" %%i in ('dir /b/a-d "%dr%\*.%2" 2^>nul') do (
set "bg=%%i"
for %%a in ("%dr%\!bg!" ) do (
         set /a iSumT += %%~za
         Echo %%a
del /f/q %%a 2>nul
      )
)
exit /b 0
 
rem -------------------------------------------------------------------------
 
:x1
set dirsize4=0
ping 127.0.0.1 -n 5 >nul
For /F "UseBackQ" %%d In (`wmic LogicalDisk Where "FileSystem LIKE '_%%'" Get Caption^|Find ":"`) Do (
      Set "DirProg=%%d\RECYCLER"& Set "flag=0"
      If EXIST !DirProg! (For /F "Skip=4 Tokens=1-3" %%a In ('DIR/-C/S/A:-D "!DirProg!"2^>Nul') Do (
      If !flag!==1 Set dirsize4=%%c
      If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
       )
  )
)
Set rst=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches
REG Add "%rst%\Recycle Bin" /v StateFlags0001 /t REG_DWORD /d 2 /f >nul
REG Delete "%rst%\Compress old files" /f 2>nul
Cleanmgr /sagerun:1
echo Cnt=%Cnt%
echo dirsize4=%dirsize4%
Set /A Cnt +=dirsize4
echo  summ_Cnt=%Cnt%
pause

Последний раз редактировалось sov44, 30-11-2011 в 10:15. Причина: ищу решение


Отправлено: 19:43, 29-11-2011 | #59


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1274
Благодарности: 1030

Профиль | Отправить PM | Цитировать


sov44, да уж, не ожидал. Похоже чудит find/findstr при использовании оператора piping (|). Уберите красное:
Код: Выделить весь код
tasklist 2>nul|find /i "winword.exe" 1>nul 2>nul
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:51, 30-11-2011 | #60



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] получить размер каталога с подкаталогами

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Копирование самого позднего по дате создания каталога. SANIOK_AV Скриптовые языки администрирования Windows 2 04-12-2009 17:29
Разное - [решено] удаление каталога с подкаталогами lud Microsoft Windows 2000/XP 2 02-07-2009 15:57
CMD/BAT - [решено] Поиск каталога и копирование всего его содержимого desk Скриптовые языки администрирования Windows 4 01-07-2009 14:28
Интерфейс - [решено] цвет шрифта каталога tref2me Microsoft Windows 2000/XP 4 07-06-2008 07:43
[решено] Идентификация каталога c помощью shell programmist72 Общий по Linux 14 13-11-2006 10:06




 
Переход