|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Общий размер каталогов по списку в TXT |
|
CMD/BAT - Общий размер каталогов по списку в TXT
|
Пользователь Сообщения: 70 |
Профиль | Отправить PM | Цитировать Добрый день.
Задача: по определенному признаку отбираю в TXT набор папок с путями( в принципе они все в одном каталоге). Папки (базы КонсультантПлюс) каждый день меняются в размере, мне периодически нужно уточнять сколько будет весить тот или иной набор баз. Сначала решил с помощью утилиты DURUSE, там просто загонял в переменную одной строкой все пути и считал. Но напоролся на ограничение длины строки. rem считываем список баз из spisok.txt в переменную dirs set /p dirs=< spisok.txt Diruse.exe /m %dirs% > size.txt Или может кто предложит другое решение? |
|
Отправлено: 10:15, 08-12-2017 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать если все пути в одной директории, достаточно:
@echo off setlocal enabledelayedexpansion set "d=C:\papka" for /f "tokens=3" %%a in ('2^>nul dir /a-d/s/-c "%d%"') do set sz=!pps!& set pps=%%a echo Размер папки - %sz% байт pause @echo off set "cPath="C:\papka1" "C:\papka2" "C:\papka7"" for %%d in (%cPath%) do for /f "tokens=3" %%a in ('"2>nul dir /a-d/s/-c "%%~d"|sort /+2147483647|more +1|set /p sz=^& cmd /v/c echo !sz!"') do set /a csz+=%%a echo General size: %csz% pause подобные задачи лучше делать не на cmd или с применением спец. софта |
Последний раз редактировалось alpap, 08-12-2017 в 14:14. Отправлено: 13:57, 08-12-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 70
|
Профиль | Отправить PM | Цитировать alpap, спасибо за ответ но он мне не подходит, поскольку мне не нужен размер всех папок в директории. Мне нужен общий размер папок по списку заданному в текстовом файле, т.е определенному набору из имеющихся в данном каталоге. Наборы слишком вариативны, что бы их всех прописать заранее.
Для интереса натравил первый вариант на целевую папку общим весом 225гб, Ваш вариант выдал мне 193 байта |
Отправлено: 14:15, 08-12-2017 | #3 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать surgutfred,
вот со списком @echo off set "f=C:\spisok.txt" for /f "usebackq delims=" %%p in ("%f%") do ( for /f "tokens=3" %%a in ('"2>nul dir /a-d/s/-c "%%p"|sort /+2147483647|more +1|set /p sz=^& cmd /v/c echo !sz!"') do set /a csz+=%%a ) echo General size: %csz% pause Цитата surgutfred:
|
|
Отправлено: 15:47, 08-12-2017 | #4 |
Ветеран Сообщения: 2703
|
Профиль | Отправить PM | Цитировать surgutfred,
Попробуйте натравить мой .vbs-скрипт. Пропишите свой сетевой путь. Я не проверял на таком пути, по идее, должно работать. Пропишите путь создаваемого текстового файла
BoxIn = "Z:\PC86\CONS_BASE2\BASE" SubDir = Array("ARB", "BCN", "BDV", "BMS", "BPV", "BSK") OutFile = "Z:\Box_Out\Обзор Консультант Плюс.txt" Set FSO = CreateObject("Scripting.FileSystemObject") nMaxSize = 16 nMaxFiles = 5 OutString = BoxIn + vbCrLf + vbCrLf tSize = 0 tFiles = 0 For Each inFolder In SubDir inName = BoxIn + "\" + inFolder With FSO.GetFolder(inName) inSize = .Size inFiles = .Files.Count End With tSize = tSize + inSize tFiles = tFiles + inFiles OutString = OutString + IntFormat(inSize, nMaxSize) + IntFormat(inFiles, nMaxFiles) + " " + inFolder + vbCrLf Next OutString = OutString + String(nMaxSize + nMaxFiles, "-") + vbCrLf + IntFormat(tSize, nMaxSize) + IntFormat(tFiles, nMaxFiles) With FSO.OpenTextFile(OutFile, 2, True) .Write (OutString) .Close End With MsgBox OutString Function IntFormat(S, N) SS = Replace(FormatNumber(S, 0), Chr(160), "'") If N > Len(SS) Then SS = Right(Space(N) + SS, N) IntFormat = SS End Function MsgBox OutString Скорректировал благодоря подсказке Iska То же самое, данные передаются в аргументах
Set WArg = WScript.Arguments If WArg.Count >= 3 Then With WArg OutFile = .Item(0) BoxIn = .Item(1) NSubDir = .Count-3 Redim SubDir(NSubDir) For i = 0 To NSubDir SubDir(i) = .Item(i+2) Next End With Set FSO = CreateObject("Scripting.FileSystemObject") nMaxSize = 16 nMaxFiles = 5 OutString = BoxIn + vbCrLf + vbCrLf tSize = 0 tFiles = 0 For Each inFolder In SubDir inName = BoxIn + "\" + inFolder On Error Resume Next Set SubFolder = FSO.GetFolder(inName) If Err.Number <> 0 Then OutString = OutString + "Нет папки" + Space(nMaxSize + nMaxFiles-9) + " " + inFolder + vbCrLf Else With SubFolder inSize = .Size inFiles = .Files.Count End With tSize = tSize + inSize tFiles = tFiles + inFiles OutString = OutString + IntFormat(inSize, nMaxSize) + IntFormat(inFiles, nMaxFiles) + " " + inFolder + vbCrLf End If On Error Goto 0 Next OutString = OutString + String(nMaxSize + nMaxFiles, "-") + vbCrLf + IntFormat(tSize, nMaxSize) + IntFormat(tFiles, nMaxFiles) With FSO.OpenTextFile(OutFile, 2, True) .Write (OutString) .Close End With MsgBox OutString Else ErrMess = "" ErrMess = ErrMess + "Количество аргументов """ + CStr(WArg.Count) + """ недостаточно" + vbCrLf + vbCrLf ErrMess = ErrMess + "Укажите:" + vbCrLf ErrMess = ErrMess + "1. Путь к выходному текстовому файлу" + vbCrLf ErrMess = ErrMess + "2. Путь к папке с подпапками баз" + vbCrLf ErrMess = ErrMess + "3. Наименование 1 подпапки с базами" + vbCrLf ErrMess = ErrMess + "4. Наименование 2 подпапки с базами" + vbCrLf ErrMess = ErrMess + "... и т д" MsgBox ErrMess End If Function IntFormat(S, N) SS = Replace(FormatNumber(S, 0), Chr(160), "'") If N > Len(SS) Then SS = Right(Space(N) + SS, N) IntFormat = SS End Function Z:\script.vbs "Z:\Box_Out\Обзор Консультант Плюс.txt" "Z:\PC86\CONS_BASE2\BASE" ARB BCN BDV BMS BPV BSK |
|
------- Последний раз редактировалось megaloman, 10-12-2017 в 11:59. Отправлено: 16:12, 08-12-2017 | #5 |
Ветеран Сообщения: 2703
|
Профиль | Отправить PM | Цитировать Вот CMD. Подсчет размера папок без посторонних утилит. Общий размер папок при больших размерах в рамках CMD сделать наверное можно, но трудоёмко
@Echo Off SetLocal EnableExtensions EnableDelayedExpansion Set "BoxIn=Z:\PC86\CONS_BASE2\BASE" Set "SubDir=ARB BCN BDV BMS BPV BSK" Set "OutFile=Z:\Box_Out\Обзор Консультант Плюс.txt" Pushd "%BoxIn%" >"%OutFile%" ( Echo %BoxIn% Echo: FOR %%i IN (%SubDir%) DO ( Set "N1=" Set "N2=" FOR /F "usebackq tokens=* delims= " %%j IN (`Dir /S /A:-D "%%i"`) DO Set "N2=!N1!" & Set "N1=%%j" Echo %%i !N2! ) ) Popd То же самое, данные передаются в аргументах
@Echo Off If "%~3"=="" Cls &Echo Недостаточно аргументов &Pause &Exit /b 240 SetLocal EnableExtensions EnableDelayedExpansion Set "BoxIn=%~1" Set "SubDir=%~2" Set "OutFile=%~3" Pushd "%BoxIn%" >"%OutFile%" ( Echo %BoxIn% Echo: FOR %%i IN (%SubDir%) DO ( Set "N1=" Set "N2=Папка не найдена" If Exist "%%i" FOR /F "usebackq tokens=* delims= " %%j IN (`Dir /S /A:-D "%%i" 2^>nul`) DO Set "N2=!N1!" & Set "N1=%%j" Echo %%i !N2! ) ) Popd GoTo :Eof |
------- Последний раз редактировалось megaloman, 10-12-2017 в 11:36. Отправлено: 22:15, 08-12-2017 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
https://technet.microsoft.com/en-us/.../ee176975.aspx http://download.microsoft.com/downlo...scrdoc56en.exe |
|
Отправлено: 22:31, 08-12-2017 | #7 |
Ветеран Сообщения: 2703
|
Профиль | Отправить PM | Цитировать Iska, Спасибо, исправил.
surgutfred, Добавил варианты с передачей данных в скрипты через аргументы. |
------- Отправлено: 11:56, 10-12-2017 | #8 |
Пользователь Сообщения: 70
|
Профиль | Отправить PM | Цитировать Всем спасибо за участие.
Учитывая сложность работы cmd с большими объемами, для себя остановился на варианте vbs от megaloman VBS с аргументами наиболее удачно подошел. |
Отправлено: 08:31, 11-12-2017 | #9 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Выборка и txt по списку в txt файле | cyberp1983 | Скриптовые языки администрирования Windows | 5 | 24-05-2018 20:27 | |
CMD/BAT - [решено] Поиск файлов в поддиректориях по списку из txt и перемещение | Sub-Zero | Скриптовые языки администрирования Windows | 15 | 27-03-2017 12:58 | |
CMD/BAT - [решено] Поиск папок в поддиректории по списку из txt и перемещение | cyberp1983 | Скриптовые языки администрирования Windows | 7 | 17-04-2016 18:02 | |
MySQL - [решено] команда создания конфигурации по списку дисков в файле disk.txt - неработает | Damirt | Программирование и базы данных | 3 | 05-03-2013 18:42 | |
CMD/BAT - [решено] перемещение каталогов по списку | neprotiv | Скриптовые языки администрирования Windows | 4 | 02-03-2010 09:39 |
|