Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Подсчет количества ini файлов в папке (http://forum.oszone.net/showthread.php?t=232323)

XXXp 08-04-2012 01:29 1895428

Подсчет количества ini файлов в папке
 
Подскажите пожалуйста код скрипта, который бы мог посчитать количество файлов *.ini в папке c:/1 и вывести эту информацию на экран любым видом!
спасибо большое!

Iska 08-04-2012 01:58 1895436

Код:

Option Explicit

Dim strFolder
Dim objFile
Dim lngCount


strFolder = "c:\1"

With WScript.CreateObject("Scripting.FileSystemObject")
        If .FolderExists(strFolder) Then
                lngCount = 0
               
                For Each objFile In .GetFolder(strFolder).Files
                        If UCase(.GetExtensionName(objFile.Name)) = UCase("ini") Then
                                lngCount = lngCount + 1
                        End If
                Next
               
                WScript.Echo "Found [" & CStr(lngCount) & "] ini files"
        Else
                WScript.Echo "Can't find folder [" & strFolder & "]"
        End If
End With

WScript.Quit 0


XXXp 08-04-2012 20:19 1895870

Спасибо, только очень медленно делает, подсчет 709 ини файлов занял минут 5 при 100% загрузке процессора! Нет ли более скоростного метода? Спасибо за помощь

Iska 08-04-2012 23:48 1895926

XXXp, сколько у Вас всего файлов в «c:\1»?

XXXp 08-04-2012 23:52 1895929

в одной папке порядка 50 - он посчитал в течение нескольких секунд. В другой - 709, с этой папкой возникли проблемы - компьютер минут 5 грузился, ЦП был загружен на 100%, в конце (минут через 4-5), он выдал сообщение, что файлов 709...

Iska 09-04-2012 00:09 1895938

XXXp, всего файлов. Не «ini», а всего файлов в папке?

XXXp 09-04-2012 01:53 1895976

Примерно 1400

Iska 09-04-2012 02:21 1895983

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

А если перезагрузить (!) машину и в командной строке выполнить для Вашей папки «c:\1»:
Код:

dir "c:\1\*.ini"
— сколько сие займёт времени?

XXXp 09-04-2012 17:00 1896405

выполнил команду, выполнилось почти мгновенно (меньше секунды)

Iska 09-04-2012 17:54 1896460

XXXp, а если теперь для той же папки «c:\1», опять же — после перезагрузки, попробовать выполнить скрипт?

XXXp 09-04-2012 21:05 1896577

Также, как и в прошлый раз ожидание заняло порядка 4-5 минут...

Iska 09-04-2012 21:16 1896586

XXXp, сожалею.

Вот результат исполнения несколько модифицированного скрипта:
читать дальше »
Код:

Option Explicit

Dim strFolder
Dim objFile
Dim lngCount

WScript.Echo Now()

With WScript.CreateObject("Scripting.FileSystemObject")
        strFolder = .GetSpecialFolder(1)
       
        If .FolderExists(strFolder) Then
                lngCount = 0
               
                WScript.Echo "Total [" & .GetFolder(strFolder).Files.Count & "] files"
               
                For Each objFile In .GetFolder(strFolder).Files
                        If UCase(.GetExtensionName(objFile.Name)) = UCase("ini") Then
                                lngCount = lngCount + 1
                        End If
                Next
               
                WScript.Echo "Found [" & CStr(lngCount) & "] ini files"
        Else
                WScript.Echo "Can't find folder [" & strFolder & "]"
        End If
End With

WScript.Echo Now()

WScript.Quit 0


для «%SystemRoot%\System32» у меня:
Цитата:

Код:

09.04.2012 21:09:41
Total [2345] files
Found [18] ini files
09.04.2012 21:09:45


На предмет поиска причин и анализа «тормозов» при исполнении скрипта стоит обратиться в профильный раздел данного форума в зависимости от Вашей версии Windows, описав проблему и приведя ссылку на данную тему. Скорее всего понадобятся логи, сделанные Process Monitor'ом в момент исполнения скрипта.

XXXp 09-04-2012 23:07 1896667

Понял, спасибо за помощь!

XXXp 10-04-2012 01:05 1896759

А если в командной строке все летает, может есть возможность сделать подобное на bat файле?

Iska 10-04-2012 02:06 1896779

Можно хоть в пакетном файле, хоть непосредственно в командной строке. Например:
Код:

(<nul set /p sValue=Found ini files: & (dir /b /a "%SystemRoot%\System32\*.ini"|find.exe /c /v ""))| msg.exe *"


Время: 09:05.

Время: 09:05.
© OSzone.net 2001-