<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; JScript: поиск файлов по расширению]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=3965&amp;type=atom" />
	<updated>2010-03-29T15:08:43Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=3965</id>
		<entry>
			<title type="html"><![CDATA[Re: JScript: поиск файлов по расширению]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=34166#p34166" />
			<content type="html"><![CDATA[<p><strong>Использование FileSearch из MsWord|Excel|Access&nbsp; нерационально, так как, начиная с 2007 версии офиса, данная возможность не поддерживается.</strong></p><p>Поэтому указанный ниже код (который, к сожалению, я не могу проверить) будет работать в старых версиях.</p><div class="codebox"><pre><code>function GetFileList(Directory, Extension, Deep)
{
    !Extension || Extension==&quot;&quot; ? Extension = &quot;*.*&quot;: null;
    Deep? Deep = true: Deep = false;

    var Application = new ActiveXObject(&quot;Excel.Application&quot;),
    FileSearch = Application.FileSearch;

    Application.NewSearch();
    FileSearch.FileName = Extension;
    FileSearch.LookIn = Directory;
    FileSearch.SearchSubfolders = Deep;
    FileSearch.Execute();
    
    var Result = [];
    
    for (var i=0, l=FileSearch.FoundFiles.Count; i&lt;l; i++)
    Result.push(FileSearch.FoundFiles[i]);
    
    FileSearch = null;
    Application.Quit();
    return Result;
}</code></pre></div><p>Microsoft предлагает использовать FSO или команду Dir из VBA.</p>]]></content>
			<author>
				<name><![CDATA[JSmаn]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24434</uri>
			</author>
			<updated>2010-03-29T15:08:43Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=34166#p34166</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: поиск файлов по расширению]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=31367#p31367" />
			<content type="html"><![CDATA[<p><strong> Поиск файлов средствами CMD без использования сторонних компонентов</strong></p><p><strong>Функция GetFileList</strong>.</p><p>Directory — обязательный параметр, каталог поиска<br />Extension — необязательный параметр, расширения разыскиваемых файлов через пробел. По умолчанию &quot;&quot;.<br />Deep — необязательный параметр, флаг учета дочерних директорий</p><p>Возвращает список файлов в виде массива.</p><div class="codebox"><pre><code>function GetFileList(Directory, Extension, Deep)
{
    var
        FSO = WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;),
        WshShell = WScript.CreateObject(&quot;WScript.Shell&quot;),
        LastCurrentDirectory = WshShell.CurrentDirectory;

// Проверка необязательных параметров Extension, Deep
        !Extension || Extension==&quot;&quot; ? Extension = &quot;&quot;: null;
        Deep? Deep = &quot;/S&quot;: Deep = &quot;&quot;;
        
// Преобразуем исходнный Directory в короткий путь
        Directory = FSO.GetFolder(Directory).ShortPath;
        
    var    
        Result = [],
        Command, 
        TempPath = WshShell.ExpandEnvironmentStrings(&quot;%TEMP%&quot;)+&quot;\\&quot;, // Путь к папке %TEMP%
        TempBuffer = TempPath + (new Date()).valueOf().toString().substring(6)+&quot;.txt&quot;;
        
        // Ведем поиск средствами CMD. 
        Command = &quot;cmd.exe /c chcp 1251 &amp;&amp; cmd.exe /c &amp;&amp; dir /B &quot;+Deep+&quot; /A:-D &quot;+ Extension+ &quot; &gt; &quot;+TempBuffer;

        // Устанавливаем директорию по умолчанию
        WshShell.CurrentDirectory = Directory;

        // Запустим CMD, ждем окончание выполнения этого процесса
        WshShell.Run(Command, 0, true);

    var 
        Stream = FSO.OpenTextFile(TempBuffer, 1, false);
        Result = Stream.ReadAll();
        Stream.Close();
        
        FSO.DeleteFile (TempBuffer);
        
        Result = Result.split(&quot;\n&quot;);
        Result.length -= 1;
        
        WshShell.CurrentDirectory = LastCurrentDirectory;

    return Result;
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[JSmаn]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24434</uri>
			</author>
			<updated>2009-12-09T14:08:31Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=31367#p31367</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[JScript: поиск файлов по расширению]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=31365#p31365" />
			<content type="html"><![CDATA[<p><strong>Поиск файлов средствами CMD.</strong></p><p>Функция получения списка файлов средствами cmd.exe. От аналогов она отличается скоростью работы при поиске в «большом» количестве файлов.</p><p>Directory — обязательный параметр, каталог поиска<br />Extension — необязательный параметр, расширения разыскиваемых файлов через пробел. По умолчанию &quot;&quot;.<br />Deep — необязательный параметр, флаг учета дочерних директорий</p><p>Возвращает список файлов в виде массива.</p><p>Функция использует сторонний компонент Steam.Reader от участника форума <strong>Xameleon</strong>.<br />Stream.Reader весит 5 кб в архиве. Взять его можно <a href="http://slil.ru/28298814">тут</a>.</p><div class="codebox"><pre><code>function GetFileList(Directory, Extension, Deep)
{
    var
        FSO = WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;),
        WshShell = WScript.CreateObject(&quot;WScript.Shell&quot;),
        LastCurrentDirectory = WshShell.CurrentDirectory;

// Проверка необязательных параметров Extension, Deep
        !Extension || Extension==&quot;&quot; ? Extension = &quot;&quot;: null;
        Deep? Deep = &quot;/S&quot;: Deep = &quot;&quot;;
        
// Преобразуем исходнный Directory в короткий путь
        Directory = FSO.GetFolder(Directory).ShortPath;
        
    var    
        Result = [],
        Command, 
        TempPath = WshShell.ExpandEnvironmentStrings(&quot;%TEMP%&quot;)+&quot;\\&quot;, // Путь к папке %TEMP%
        TempBuffer = TempPath + (new Date()).valueOf().toString().substring(6)+&quot;.txt&quot;;
        
        // Ведем поиск средствами CMD. 
        Command = &quot;cmd.exe /c chcp 1251 &amp;&amp; cmd.exe /c &amp;&amp; dir /B &quot;+Deep+&quot; /A:-D &quot;+ Extension+ &quot; &gt; &quot;+TempBuffer;

        // Устанавливаем директорию по умолчанию
        WshShell.CurrentDirectory = Directory;

        // Запустим CMD, ждем окончание выполнения этого процесса
        WshShell.Run(Command, 0, true);
        
    var 
        Stream = WScript.CreateObject(&quot;Stream.Reader&quot;),
        blocksize = 64 * 1024, 
        blocks;

        Stream.OpenFile(TempBuffer);
        Stream.position = 0;
        blocks = Stream.size / blocksize;
        
        for (var i=0; i&lt;blocks; i++)
        Result.push(Stream.ReadText(blocksize));
        
        Stream.CloseFile();
        FSO.DeleteFile (TempBuffer);
        
        Result = Result.join(&quot;&quot;).split(&quot;\n&quot;);
        Result.length -= 1;
        
        WshShell.CurrentDirectory = LastCurrentDirectory;

    return Result;
}

var
    Directory = &quot;C:\\&quot;,
    FileList = [b]GetFileList[/b](Directory, &quot;*.doc *.avi&quot;, true);

// Вывод количества найденных файлов doc[x] и avi
WScript.Echo([&quot;Найдено:&quot;, FileList.length, &quot;файлов&quot;].join(&quot; &quot;));</code></pre></div>]]></content>
			<author>
				<name><![CDATA[JSmаn]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24434</uri>
			</author>
			<updated>2009-12-09T13:54:16Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=31365#p31365</id>
		</entry>
</feed>
