Войти

Показать полную графическую версию : [решено] узнать размер папок. экспорт в txt


Страниц : 1 [2] 3

palexa
10-11-2018, 18:11
работает батник, только слишком много информации, выводит все подпапки, абсолютно все

Но если речь зашла о батнике, Вы не могли бы выложить код батника, который посчитает размер как и предоставленный Вами vbs
размер каждой папки в директории ну и в конце(в начале) размер этого каталога

баником удобнее будет

megaloman
10-11-2018, 20:00
palexa, Ломать - не строить, душа не болит. Закомментируйте строкуrem For /F "usebackq delims=" %%d IN (`2^>nul Dir %1 /B /A:D`) DO Call :Out "%~1\%%d" %2- "%~3%Marg%"
Кстати, подправил код: корректнее в выделенной строке параметр взять в кавычки.
Добавил /A в выделенной строке.

palexa
11-11-2018, 05:50
Кстати, что бы читать нормально файл блокнотом, пришлось добавить кодировку в строку
For /F "usebackq delims=" %%z IN (`2^>nul chcp 1251^& Dir %1 /S /A`) DO Set ZZ=!Z1! &Set Z1=%%z

megaloman
11-11-2018, 06:44
palexa, а почему бы не добавить
chcp 1251 >nul
в самое начало батника, третей строкой, а не внутрь цикла. При этом, естественно, и сам батник сохранить в 1251 при наличии кириллицы в задаваемых путях?

Iska
11-11-2018, 07:14
Лучше обзавестись вменяемым средством для работы с поддержкой различных кодировок.

palexa
11-11-2018, 11:07
ещё хочу спросить, как в этом батнике сделать что бы он не переписывал файл, а дописывал строки ниже

megaloman
11-11-2018, 12:01
palexa, вместо
>"%Out%" Echo %iSize% %BoxIn%
>>"%Out%" Echo %iSize% %BoxIn%
А еще лучше им не пользоваться - по сравнению с VBS медленно.

palexa
11-11-2018, 12:22
спасибо

Заметил что на много медленнее, но пока устроит

megaloman
11-11-2018, 19:15
palexa, @set @E=1; /*

@Echo Off
CHCP 1251 >nul
Set "BoxIn=D:\Мой контент"

Set "Out=D:\Мой контент байт.inf"
Set "Out1=D:\Мой контент килобайт.inf"
Set "Out2=D:\Мой контент мегабайт.inf"
Set "Out3=D:\Мой контент гигабайт.inf"

>>"%Out%" Call :InDir "%BoxIn%"
>"%Out1%" Call :InDir "%BoxIn%" 1
>"%Out2%" Call :InDir "%BoxIn%" 2
>"%Out3%" Call :InDir "%BoxIn%" 3
Pause
GoTo :Eof

:InDir
FOR /F "usebackq delims=" %%z IN (`Cscript //NoLogo /E:jscript "%~dpnx0" "%~1" "%~2"`) DO Call :Out "%%z" "%~1" "%~2"
For /F "usebackq delims=" %%d IN (`2^>nul Dir "%~1" /B /A:D`) DO (
FOR /F "usebackq delims=" %%z IN (`Cscript //NoLogo /E:jscript "%~dpnx0" "%~1\%%d" "%~2"`) DO Call :Out "%%z" "%%d" "%~2"
)
GoTo :Eof

:Out
SetLocal
Set "S= %~1"
Set "S=%S:~-12%"
If "%~3"=="1" Set "S=%S:~-9%"
If "%~3"=="2" Set "S=%S:~-6%"
If "%~3"=="3" Set "S=%S:~-3%"
Echo %S% %2
EndLocal
GoTo :Eof

*/

var oArg = WScript.Arguments;
if (oArg.Count() < 1) {
WScript.Echo("Arguments absent");
WScript.Quit(1);
}

var FSO=WScript.CreateObject("Scripting.FileSystemObject");

if (!FSO.FolderExists(oArg(0))) {
WScript.Echo(oArg(0) + " not found");
WScript.Quit(2);
}

try {var sFold=FSO.GetFolder(oArg(0)).Size}
catch (err) {if (err != 0) {
WScript.Echo(oArg(0)+" "+err.description);
WScript.Quit(3)}
}
if (oArg.Count() == 2) {
if (oArg(1)==1) sFold = Math.round(sFold/1024);
if (oArg(1)==2) sFold = Math.round(sFold/1024/1024);
if (oArg(1)==3) sFold = Math.round(sFold/1024/1024/1024);
}

WScript.Echo(sFold);
WScript.Quit(0)
Обратите внимание, здесь сделана возможность выдавать размер папки в разных единицах. В этом примере - 4 выходных файла. Оставьте вызов только одного варианта. Чтобы выходной файл дописывался, вместо > рисуйте >>

palexa
11-11-2018, 19:24
Спасибо, попробую

palexa
11-11-2018, 20:22
Как оказалось время исполнения имеет значение,
Пишу
@set @E=1; /*
echo %DATE% - %time:~,5% - %COMPUTERNAME% - Начало>>D:\log.txt
@Echo Off

::Pause
Echo on
echo %DATE% - %time:~,5% - %COMPUTERNAME% - Конец>>D:\log.txt
GoTo :Eof

Но не записывает конец

Что бы считало размер только одной верхней директории за комментировал строки
:: FOR /F "usebackq delims=" %%z IN (`Cscript //NoLogo /E:jscript "%~dpnx0" "%~1\%%d" "%~2"`) DO Call :Out "%%z" "%%d" "%~2"

Этого достаточно для скорости подсчёта ?

megaloman
11-11-2018, 20:37
palexa, переименуйте скрипт в txt, приложите к сообщению

palexa
11-11-2018, 20:42
Вот, прикладываю

Iska
11-11-2018, 20:46
Пишу »
Зараз приучайтесь писать так:
>>"D:\log.txt" echo %DATE% - %time:~,5% - %COMPUTERNAME% - Начало
>>"D:\log.txt" echo %DATE% - %time:~,5% - %COMPUTERNAME% - Конец

megaloman
11-11-2018, 21:48
palexa, Не делайте комментарии ::

palexa
11-11-2018, 22:23
Первый батник, ууу считает, устал ждать, и это самый маленький по размеру сервер

11.11.2018 - 19:58 - TS4 - Начало
122897 File(s) 43*007*258*445 bytes c:\Users\
11.11.2018 - 21:08 - TS4 - Конец

Последний обломался :( , странно как то

11.11.2018 - 21:14 - TS4 - Начало
on denied "c:\Users\"
11.11.2018 - 21:14 - TS4 - Конец 1

palexa, Не делайте комментарии :: »

ок

Я думал оно раз в пять быстрее будет считать, скажу админу что можно задачу эту в планировщик поставить, пусть думает, вместо того что бы меня эксплуатировать ручным трудом

Спасибо за помощь

it3
21-08-2019, 06:26
Доброго времени суток!
Не стал создавать новую тему, решил написать в подобную:
Есть перечень каталогов:
O:\Folder1
O:\Folder1\podFolder1
O:\Folder2\podFolder2\podpodFolder2
O:\Folder3\podFolder3
... ... ... ... ...
O:\Folder4
O:\Folder5\podFolder5
O:\Folder6
... ... ... ... ...
размер которых необходимо вывести в *.txt/*.csv (Формат: Папка -> Размер).
Прошу помощи.

it3
21-08-2019, 07:10
- что такое перечень? Это текстовый файл, либо этот перечень предполагается организовать внутри скрипта? Размер в чём: байтах, гигабайтах? »
Перечень - внутри скрипта. Размер в Гигабайтах.

megaloman
21-08-2019, 07:58
@set @E=1; /*

@Echo Off
CHCP 1251 >nul
Set "Out3=D:\Мой контент гигабайт.txt"
2>nul Del "%Out3%"

rem 0-байты, 1-килобайты, 2-мегабайты, 3-гигабайты

>>"%Out3%" Call :InDir "D:\Мой контент" 3
>>"%Out3%" Call :InDir "D:\Мой контент\Музыка" 3
>>"%Out3%" Call :InDir "D:\Мой контент\Музыка\_Скопировано.wd" 3
>>"%Out3%" Call :InDir "D:\Мой контент\Музыка\_Скопировано.wd\Vivaldi-1" 3
>>"%Out3%" Call :InDir "D:\CMD_Forum\Муз" 3
GoTo :Eof

:InDir
FOR /F "usebackq delims=" %%z IN (`Cscript //NoLogo /E:jscript "%~dpnx0" "%~1" "%~2"`) DO Call :Out "%%z" "%~1" "%~2"
GoTo :Eof

:Out
SetLocal
Echo %~2 -^> %~1
EndLocal
GoTo :Eof

*/

var oArg = WScript.Arguments;
if (oArg.Count() < 1) {
WScript.Echo("Arguments absent");
WScript.Quit(1);
}

var FSO=WScript.CreateObject("Scripting.FileSystemObject");

if (!FSO.FolderExists(oArg(0))) {
WScript.Echo("not found");
WScript.Quit(2);
}

try {var sFold=FSO.GetFolder(oArg(0)).Size}
catch (err) {if (err != 0) {
WScript.Echo(err.description);
WScript.Quit(3)}
}
if (oArg.Count() == 2) {
if (oArg(1)==1) sFold = Math.round(sFold/1024);
if (oArg(1)==2) sFold = Math.round(sFold/1024/1024);
if (oArg(1)==3) sFold = Math.round(sFold/1024/1024/1024);
}

WScript.Echo(sFold);
WScript.Quit(0)

it3
21-08-2019, 08:50
megaloman, с сетевыми дисками скрипт не хочет работать.
O:\Folder\Folder -> not found
O:\Folder\Folder\Folder -> not found
O:\Folder\Folder\Folder7 -> not found
O:\Folder\Folder8 -> not found




© OSzone.net 2001-2012