Пакетная проверка размера папки с помощью команды powershell - PullRequest
0 голосов
/ 09 мая 2018

Я очень новичок в пакетном скриптинге, и есть одна часть, которую мне не хватает в моем скрипте.

В основном я хочу проверить, находится ли конкретная папка (с подпапками) между определенным диапазоном размеров. Обычный размер папки составляет около 200 ГБ, поэтому я прочитал, что вы не можете проверить размер в пакетных командах, так как cmd работает только до 2 ГБ. Поэтому мне нужно будет использовать команду power-shell в пакетном скрипте. Поэтому в пакетном скрипте я проверял бы размер папки> 190 ГБ и <250 ГБ с помощью команды power-shell, и команда возвращала бы возвращаемое значение, если оно находится в требуемом диапазоне или нет. </p>

Я нашел следующую команду:

powershell -ExecutionPolicy Unrestricted -c "{0:N2} MB" -f ((Get-ChildItem C:\patch\to\file -Recurse | Measure-Object -Property Length -Sum -ErrorAction Stop).Sum / 1MB)

Если вы просто введете код в Powershell, вы получите возвращаемое значение с указанием МБ определенной папки, но я не знаю, как перейти оттуда.

1 Ответ

0 голосов
/ 09 мая 2018

В целом я согласен с тем, что PowerShell является более современной и многофункциональной оболочкой, но если это невозможно:

  • В вашей команде PowerShell вам нужно экранировать двойные кавычки с обратной косой чертой и каналом с кареткой, чтобы они не интерпретировались cmd.exe
  • для пакета требуется чистое целое число, поэтому измените спецификатор формата \"{0:N2} MB\" на \"{0:N0}\"
  • чтобы обработать вывод другой команды в пакетном режиме, проанализировать ее с помощью for /f

:: Q:\Test\2018\05\09\SO_50247759.cmd
@Echo off
Set "Folder=C:\Test"
:: TargetSize in  GB * 1024 = MB
:: _PlusMinus as percent
:: _UpperB, _LowerB  are the calculated bounds
:: you may set bounds to fixed values
Set /A _TargetSize=200*1024, _PlusMinus=5, _Upperb=_TargetSize+_TargetSize*_PlusMinus/100, _LowerB=_TargetSize-_TargetSize*_PlusMinus/100
For /f "delims=" %%S in ('
powershell -Exec Unrestricted -c \"{0:N0}\" -f ((GCI \"%Folder%\" -R^^^|Measure Length -Sum -EA 1^).Sum/1MB^)
') Do Set "FolderSize=%%S"

If %FolderSize% gtr %_UpperB% (
  Echo Size %FolderSize% of %Folder% is greater than upper bound %_UpperB%
  Exit /B 2
) else ( 
  If %FolderSize% lss %_LowerB% (
    Echo Size %FolderSize% of %Folder% is less than lower bound %_LowerB%
    Exit /b 1
  ) 
)
Echo Size %FolderSize% of %Folder% is within lower bound %_LowerB% and upper bound %_UpperB%

Пример вывода:

> SO_50247759.cmd
Size 173 of C:\Test is less than lower bound 194560
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...