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

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

Ответить
Настройки темы
Любой язык - [решено] Определение размера папки

Старожил


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

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


Доброго.
Подскажите, как реализовать задачу:
Требуется в списке компов (в текстовом файле (Формат: PC00T1 построчно)) на диске C:\ в папке ProgramData проверить наличие папки (например ТЕСТ) и определить размер папки, далее вывести в лог
[Имя ПК]-[Если папки нет, то записывает ее отсутствие]-[Размер папки в формате Мбайт]
Спасибо.

Отправлено: 12:56, 01-04-2016

 

Ветеран


Contributor


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

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


Цитата Fantastish:
Требуется в списке компов (в текстовом файле (Формат: PC00T1 построчно))
-понятно
Цитата Fantastish:
на диске C:\ в папке ProgramData проверить наличие папки (например ТЕСТ)
C:\ProgramData\ТЕСТ - я правильно понял? А причём здесь список компов? На каждом локальном компьютере ищем папку? Или по сети имеем доступ к каждому компу (как расшарена папка?) Или в папке C:\ProgramData на каком-то одном компе (сервере?) должна быть папка, сопоставимая с именем компа из списка?

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 02-04-2016 в 09:50.


Отправлено: 09:38, 02-04-2016 | #2



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

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


Ветеран


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

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


Размер папки узнать легко. На счет списка компьютеров, то на этот вопрос, без реального тестирования ответить не могу.
PowerShell:
Код: Выделить весь код
$size = get-childitem "C:\ProgramData\ТЕСТ" -force -recurse | measure-object length -sum
'Size of C:\ProgramData\ТЕСТ is {0:0.00}Mb' -f ($size.sum / 1mb)
Батник (без проверки на 2147483647):
Код: Выделить весь код
@echo off
setlocal
1>nul chcp 437

for /f "tokens=3" %%i in ('dir /s /-c C:\ProgramData\TECT ^| findstr "File(s)"') do set /a size=%%i/1048576
echo Size of C:\ProgramData\ТЕСТ is %size%Mb

1>nul chcp 866

Последний раз редактировалось Foreigner, 02-04-2016 в 13:30.

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

Отправлено: 10:43, 02-04-2016 | #3


Ветеран


Contributor


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

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


Foreigner, Я в полном восторге от того, что поиск "File(s)" в таком контексте годится для системы с русскоязычным интерфейсом.
Вот еще вариант без findstr
Код: Выделить весь код
@echo off
cls
Set "In=z:\ProgramData\rrr"

SetLocal EnableExtensions EnableDelayedExpansion

If Exist "%In%" (
	for /f "usebackq tokens=3" %%i in (`dir /s /-c "%In%" 2^>nul`) do Set A=!B! & Set B=%%i
	Set /A A=!A!/1048576
	Echo !A!Mb in %In%
) Else (
	Echo Not Exist %In%
)
Однако, при переводе байт в мегабайты по моему скромному мнению не совсем корректно в батнике отображать результат деления размера в байтах на 1048576 (то есть 1024^2) так как батник работает в целых числах и результат, например, 10.99 будет отображаться как 10.
Можно попытаться для корректности отображения применить такое выражение для перевода в мегабайты с десятичным округлением вместо имеющегося
Код: Выделить весь код
Set /A A=^(^(!A!*10^)/1048576+5^)/10

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 02-04-2016 в 19:47.


Отправлено: 18:15, 02-04-2016 | #4


Забанен


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

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


Если использовать robocopy, то переводить в Мб не нужно.
Код: Выделить весь код
@echo off
  setlocal
    set "dir=%programfiles%\Test"
    if not exist "%dir%" echo:Does not exist.&goto:eof
    pushd "%dir%"
      for /f "tokens=3,4" %%i in (
        'robocopy . . * /l /s /v /r:1 /w:1 ^| findstr /irc:"bytes"'
      ) do echo:%dir%: %%i%%j
    popd
  endlocal
exit /b
Остальное можно легко подсторить под себя.
На счет PS... можно было бы короче:
Код: Выделить весь код
'{0:f2}Mb' -f ((ls $env:programfiles\Test -r -for -ea 0 | measure length -sum).Sum / 1Mb)

Отправлено: 19:04, 02-04-2016 | #5


Старожил


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

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


Прошу прощения не мог ответить.

Цитата megaloman:
C:\ProgramData\ТЕСТ - я правильно понял? А причём здесь список компов? На каждом локальном компьютере ищем папку? Или по сети имеем доступ к каждому компу (как расшарена папка?) Или в папке C:\ProgramData на каком-то одном компе (сервере?) должна быть папка, сопоставимая с именем компа из списка? »
Данная папка приведена как пример, она присутствует на локальных компьютерах в сети и к ней есть доступ тока вида \\pc\c$\programdata\тест - естественно у группы администраторов

Отправлено: 09:46, 06-04-2016 | #6


Ветеран


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

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


Цитата Fantastish:
она присутствует на локальных компьютерах в сети и к ней есть доступ тока вида \\pc\c$\programdata\тест - естественно у группы администраторов »
У администраторов есть доступ к удалённой машине по Wbem, а не только по UNC. Кроме того, в случае PowerShell доступна ещё одна технология доступа.

Отправлено: 11:00, 06-04-2016 | #7


Старожил


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

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


процесс реализация (работы/механизма) скрипта в принципе не так критичен, чем проще тем проще
главное из списка машин собрать информацию, чтобы руками не проходить не искать

Отправлено: 13:29, 06-04-2016 | #8


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo off
cls

Set "Spis=Z:\Spis_Comp.txt"
Set "Logf=Z:\Logfile.txt"
Set "Shar=C$\ProgramData\Тест"
rem                           Set "Shar=C$\ProgramData\Application Data"

SetLocal EnableExtensions EnableDelayedExpansion

Del "%Logf%" 2>nul

FOR /F "usebackq delims=" %%c IN ("%Spis%") DO Call :ComPing "%%c"
GoTo :Eof

:ComPing
Ping -n 1 -w 1000 %~1 >nul 2>nul 

If Not !ERRORLEVEL!==0 (
		Echo ??? %1 Не в сети >>"%Logf%"
	) Else (
		Call :Dostup "\\%~1\%Shar%"
	)
)
GoTo :Eof

:Dostup
Set "Share=%~1"

If Exist "%Share%\" (
	Dir "%Share%\*.*" >nul 2>nul
	If Not !ERRORLEVEL!==0 (
		Echo --- Нет доступа %Share% >>"%Logf%"
	) Else (
		Call :SizeDir "%Share%" 
	)
) Else (
	Echo --- Не существует %Share% >>"%Logf%"
)
GoTo :Eof

:SizeDir

for /f "usebackq tokens=3" %%i in (`dir /s /-c %1 2^>nul`) do Set A=!B! & Set B=%%i
rem	Set /A A=!A!/1048576
Set /A A=^(^(!A!*10^)/1048576+5^)/10

Echo +++ !A!Mb в %1 >>"%Logf%"

GoTo :Eof

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

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

Отправлено: 10:51, 07-04-2016 | #9


Старожил


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

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


Спасибо, вопрос, а как может быть вот такое значение ( +++ -47Mb )

Отправлено: 09:29, 08-04-2016 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Определение размера папки+подпапок на удаленном компьютере в домене saintman Скриптовые языки администрирования Windows 0 10-12-2013 12:06
VBS/WSH/JS - определение размера файла D_e_n_n Скриптовые языки администрирования Windows 9 24-02-2012 17:09
Redhat/Fedora - [решено] Определение размера директории VladDV Общий по Linux 4 27-12-2010 10:42
FreeBSD - sh - Определение размера каталога mitsumoto Общий по FreeBSD 2 28-02-2010 18:47
Неправильное определение размера винта ukio Непонятные проблемы с Железом 15 01-12-2006 15:46




 
Переход