Войти

Показать полную графическую версию : Подсчет количества ini файлов в папке


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

Iska
08-04-2012, 01:58
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
Спасибо, только очень медленно делает, подсчет 709 ини файлов занял минут 5 при 100% загрузке процессора! Нет ли более скоростного метода? Спасибо за помощь

Iska
08-04-2012, 23:48
XXXp, сколько у Вас всего файлов в «c:\1»?

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

Iska
09-04-2012, 00:09
XXXp, всего файлов. Не «ini», а всего файлов в папке?

XXXp
09-04-2012, 01:53
Примерно 1400

Iska
09-04-2012, 02:21
XXXp, ну, на таком количестве не должно тормозить. Если бы несколько миллионов файлов в каталоге, да и то, не должно быть так…

А если перезагрузить (!) машину и в командной строке выполнить для Вашей папки «c:\1»:
dir "c:\1\*.ini"
— сколько сие займёт времени?

XXXp
09-04-2012, 17:00
выполнил команду, выполнилось почти мгновенно (меньше секунды)

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

XXXp
09-04-2012, 21:05
Также, как и в прошлый раз ожидание заняло порядка 4-5 минут...

Iska
09-04-2012, 21:16
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
Понял, спасибо за помощь!

XXXp
10-04-2012, 01:05
А если в командной строке все летает, может есть возможность сделать подобное на bat файле?

Iska
10-04-2012, 02:06
Можно хоть в пакетном файле, хоть непосредственно в командной строке. Например:
(<nul set /p sValue=Found ini files: & (dir /b /a "%SystemRoot%\System32\*.ini"|find.exe /c /v ""))| msg.exe *"




© OSzone.net 2001-2012