<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; JScript: копирование файлов с заданными расширениями]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=762</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=762&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «JScript: копирование файлов с заданными расширениями».]]></description>
		<lastBuildDate>Fri, 27 Feb 2015 12:47:15 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: JScript: копирование файлов с заданными расширениями]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=92040#p92040</link>
			<description><![CDATA[<p>Во все три скрипта выше добавлена обработка файлов без расширений. Спасибо <strong>DD</strong> за сообщение об ошибке.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Fri, 27 Feb 2015 12:47:15 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=92040#p92040</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: копирование файлов с заданными расширениями]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=6099#p6099</link>
			<description><![CDATA[<p>Вариант удаляющего скрипта, выполненный в виде html-приложения. Код нужно сохранить с расширением <strong>.hta</strong> . Выводит окно, запрашивая у пользователя расширения, пути к папкам и прочие настройки.<br /></p><div class="codebox"><pre><code>&lt;html&gt;
&lt;head&gt;
&lt;meta charset=&quot;windows-1251&quot;&gt;
&lt;title&gt;Удаление файлов по расширениям&lt;/title&gt;
&lt;hta:application id=&quot;oHTA&quot;
  applicationname=&quot;myApp&quot;
  border=&quot;thin&quot;
  borderstyle=&quot;normal&quot;
  caption=&quot;yes&quot;
  contextmenu=&quot;yes&quot;
  icon=&quot;webpage.ico&quot;
  innerborder=&quot;yes&quot;
  maximizebutton=&quot;no&quot;
  minimizebutton=&quot;yes&quot;
  navigable=&quot;no&quot;
  scroll=&quot;no&quot;
  scrollflat=&quot;no&quot;
  selection=&quot;no&quot;
  showintaskbar=&quot;yes&quot;
  singleinstance=&quot;yes&quot;
  sysmenu=&quot;yes&quot;
  version=&quot;1.0&quot;
  windowstate=&quot;normal&quot;
/&gt;

&lt;style type=&quot;text/css&quot;&gt;
  body {background:#ddd}
  body * {font:8pt/10pt Verdana; color:#000}
  div.prompt {margin: 5 18}
  div.input {text-align:center}
  div.options {text-align:left; margin: 5 14}
&lt;/style&gt;
&lt;/head&gt;

&lt;!-- ======================== Рисуем окно ======================== --&gt;

&lt;body onload=&quot;initWindow()&quot;&gt;
  &lt;div class=&quot;prompt&quot;&gt;
    Задайте расширения файлов для удаления. Файлы без расширения обозначьте
    знаком вопроса. Пример: txt,js,vbs,?
  &lt;/div&gt;
  &lt;div class=&quot;input&quot;&gt;
    &lt;input id=&quot;extensions&quot; type=&quot;text&quot; size=70&gt;
  &lt;/div&gt;
  &lt;div class=&quot;options&quot;&gt;
    &lt;input type=&quot;checkbox&quot; id=&quot;readonly&quot;&gt;
 Можно удалять файлы с атрибутом &quot;только для чтения&quot;
  &lt;/div&gt;&lt;br&gt;
  &lt;div class=&quot;prompt&quot;&gt;
    Введите путь к папке, в которой нужно удалить файлы.&lt;br&gt;
    Если папок несколько, разделяйте их пути точкой с запятой.&lt;br&gt;
    Пример: C:\Test;D:\Temp;E:\Documents
  &lt;/div&gt;
  &lt;div class=&quot;input&quot;&gt;
    &lt;input id=&quot;parents&quot; type=&quot;text&quot; size=70&gt;
  &lt;/div&gt;
  &lt;div class=&quot;options&quot;&gt;
    &lt;input type=&quot;checkbox&quot; id=&quot;recurse&quot;&gt; Удалять также файлы в подпапках
  &lt;/div&gt;&lt;br&gt;
  &lt;div class=&quot;prompt&quot;&gt;
    Введите пути к подпапкам, из которых файлы удалять нельзя.&lt;br&gt;
    Разделяйте пути точкой с запятой.
  &lt;/div&gt;
  &lt;div class=&quot;input&quot;&gt;
    &lt;input id=&quot;exceptions&quot; type=&quot;text&quot; size=70&gt;
  &lt;/div&gt;&lt;br&gt;&lt;br&gt;
  &lt;div class=&quot;input&quot;&gt;
    &lt;input type=&quot;button&quot; value=&quot;Удалить&quot; onclick=&quot;startDel()&quot;&gt; &amp;nbsp; &amp;nbsp;
    &lt;input type=&quot;button&quot; value=&quot;Отмена&quot; onclick=&quot;window.close()&quot;&gt;
  &lt;/div&gt;

&lt;!-- ========================== Функции ========================== --&gt;

  &lt;script language=&quot;JScript&quot;&gt;

    function initWindow()
    {
      var width=500, height=374;  // Ширина и высота окна.
      resizeTo(width, height);    // Задать размер.
      moveTo((screen.width-width)/2, (screen.height-height)/2); // Окно в центр.

      ext_list=&quot;txt,js,vbs&quot;;      // Расширения по умолчанию.
      extensions.value=ext_list;  // Вписываем их в поле.
    }

    function startDel()
    {
      if(ext_list=extensions.value)    // Смотрим, заданы ли расширения.
        ext_list.replace(/[ ]+/g, &quot;&quot;); // Убираем пробелы.
      else { alert(&quot;Не заданы расширения.&quot;); return } // Если нет, то выход.
                                                      
      subfolders=recurse.checked; // Смотрим флажок удаления подпапок.
      force=readonly.checked;     // То же для файлов &quot;только для чтения&quot;.
      count=0;                    // Счётчик удалённых файлов.
      errors=0;                   // Счётчик ошибок.
      error_list=&quot;&quot;;              // Список неудач при удалении (не удалось
                                  // удалить, т.к. файл только для чтения,
                                  // или не найдена папка).

      if(paths=parents.value) {   // Смотрим, заданы ли папки.
          // Убираем лишние пробелы, если есть.
        paths=paths.replace(/^[ ]+|[ ]+$/g, &quot;&quot;).replace(/[ ]*;[ ]*/g, &quot;;&quot;);
        paths=paths.split(&quot;;&quot;);   // Разбиваем введённую строку на массив путей.
      }
      else { alert(&quot;Не заданы пути к папкам.&quot;); return }

      if(excepts=exceptions.value) {  // Если заданы подпапки-исключения.
        excepts=excepts.replace(/^[ ]+|[ ]+$/g, &quot;&quot;).replace(/[ ]*;[ ]*/g, &quot;;&quot;);
        excepts=excepts.split(&quot;;&quot;);
      }

      fso=new ActiveXObject(&quot;Scripting.FileSystemObject&quot;);

      for(i=0; from_folder=paths[i]; ++i) {  // Выборка путей из массива.
        if(!fso.FolderExists(from_folder)) { // Проверка пути.
          ++errors;
          error_list+=&quot;Папка не найдена: &quot;+from_folder+&quot;\n&quot;;
          continue;
        }
        deleteFiles(from_folder);
      } 

      if(errors) error_list=&quot;\n\nОшибок &quot;+errors+&quot;:\n&quot;+error_list;

      alert(&quot;Готово. Удалено файлов: &quot;+count+error_list);
    }

    function deleteFiles(sourcepath)
    {
      for(var j=0; excepts &amp;&amp; j&lt;excepts.length; ++j)  // Проверка на исключение.
        if(excepts[j].toLowerCase()==sourcepath.toLowerCase()) return;

      var folder=fso.GetFolder(sourcepath);
      var files=new Enumerator(folder.Files);    // Коллекция файлов.

      for(; !files.atEnd(); files.moveNext()) {  // Перебор коллекции.
        var file=files.item();
        var filepath=file.Path;
        var ext=fso.GetExtensionName(filepath);
        if(!ext) ext = &quot;\\?&quot;;
        var re = new RegExp(&quot;(?:^|,)&quot; + ext + &quot;(?:,|$)&quot;, &quot;i&quot;);
        if(re.test(ext_list)) {      // Если расширение найдено в списке,
          try {                      // то пробуем удалить файл.
            file.Delete(force);
            ++count;
          }
          catch(e) {                 // Если не получилось.
            ++errors;
            error_list+=&quot;Файл не удаляется: &quot;+filepath+&quot;\n&quot;;
          }
        }
      }
      if(!subfolders) return; // Если удалять в подпапках не надо, выходим тут.
      var folders=new Enumerator(folder.SubFolders);
      for(; !folders.atEnd(); folders.moveNext())
        deleteFiles(folders.item().Path);
    }
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Sun, 18 Nov 2007 10:27:44 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=6099#p6099</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: копирование файлов с заданными расширениями]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=5993#p5993</link>
			<description><![CDATA[<p>Результат приспособления скрипта к задаче удаления файлов. С запросом у пользователя путей к папкам, из которых надо удалять. Для ввода путей использована функция VBScript InputBox, так что формат скрипта изменился - теперь код нужно сохранять с расширением <strong>.wsf</strong> .<br /></p><div class="codebox"><pre><code>&lt;job&gt;
&lt;script language=&quot;VBScript&quot;&gt;
  Function getFolderPath(Prompt, Default)
    getFolderPath=InputBox(Prompt, &quot;Удаление файлов&quot;, Default)
  End Function
&lt;/script&gt;

&lt;script language=&quot;JScript&quot;&gt;
  from_folder=&quot;C:\\test&quot;;   // Папка по умолчанию.
  ext_list=&quot;txt,js,?&quot;;      // Список расширений. Файлы без расширений
                            // обозначайте знаком вопроса.
  subfolders=0;             // Удалять также из всех подпапок. 0 - нет, 1 - да.
  force=0;                  // Удалять файлы только для чтения. 0 - нет, 1 - да.

  count=0;                  // Счётчик удалённых файлов.
  errors=0;                 // Счётчик ошибок.
  error_list=&quot;&quot;;            // Список неудач при удалении (не удалось
                            // удалить, т.к. файл только для чтения,
                            // или не найдена папка).

  inputhelp=getResource(&quot;help&quot;)+ext_list;      // Подсказка.
  paths=getFolderPath(inputhelp, from_folder); // Запрос путей у пользователя.
  if(!paths) WScript.Quit();                   // Если нажата &quot;Отмена&quot;, выйти.

  paths=paths.split(&quot;;&quot;);   // Разбиваем введённую строку на массив путей.

  fso=WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;);

  for(i=0; from_folder=paths[i]; ++i) {  // Выборка путей из массива.
    if(!fso.FolderExists(from_folder)) {
      ++errors;
      error_list+=&quot;Папка не найдена: &quot;+from_folder+&quot;\n&quot;;
      continue;
    }
    deleteFiles(from_folder);
  }

  if(errors) error_list=&quot;\n\nОшибок &quot;+errors+&quot;:\n&quot;+error_list;

  WScript.Echo(&quot;Готово. Удалено файлов: &quot;+count+error_list);


//=================================================================

  function deleteFiles(sourcepath)
  {
    var folder=fso.GetFolder(sourcepath);
    var files=new Enumerator(folder.Files);

    for(; !files.atEnd(); files.moveNext()) {
      var file=files.item();
      var filepath=file.Path;
      var ext=fso.GetExtensionName(filepath);
      if(!ext) ext = &quot;\\?&quot;;
      var re = new RegExp(&quot;(?:^|,)&quot; + ext + &quot;(?:,|$)&quot;, &quot;i&quot;);
      if(re.test(ext_list)) {
        try {
          file.Delete(force);
          ++count;
        }
        catch(e) {
          ++errors;
          error_list+=&quot;Файл не удаляется: &quot;+filepath+&quot;\n&quot;;
        }
      }
    }
    if(!subfolders) return;
    var folders=new Enumerator(folder.SubFolders);
    for(; !folders.atEnd(); folders.moveNext())
      deleteFiles(folders.item().Path);
  }
&lt;/script&gt;

&lt;resource id=&quot;help&quot;&gt;
Введите путь к папке. Если путей несколько,
разделяйте их точкой с запятой. Например:
C:\test;D:\temp;E:\documents

Будут удалены файлы с расширениями:
&lt;/resource&gt;
&lt;/job&gt;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Tue, 13 Nov 2007 11:52:27 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=5993#p5993</guid>
		</item>
		<item>
			<title><![CDATA[JScript: копирование файлов с заданными расширениями]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=5427#p5427</link>
			<description><![CDATA[<p>Скрипт копирует из папки (а при желании и из всех её подпапок) файлы с указанными расширениями. Может копировать и все подряд. На новом месте воссоздаётся структура папок, в которых лежали файлы. Но может и не воссоздаваться. Смотрите настройки в начале скрипта.<br /></p><div class="codebox"><pre><code>from_folder=&quot;C:\\WSH&quot;;  // Откуда.
to_folder=&quot;D:\\Test&quot;;   // Куда. Если папка не существует, будет создана,
                        // и также все вышестоящие папки, если не существуют.
ext_list=&quot;txt,js,?&quot;;    // Список расширений. Если check_ext=0, игнорируется.
                        // Файлы без расширений обозначайте знаком вопроса.
check_ext=1;            // Учитывать расширения. 0 - нет, 1 - да.
subfolders=1;           // Копировать также из всех подпапок. 0 - нет, 1 - да.
all_together=0;         // Все файлы в одну папку (to_folder). 0 - нет, 1 - да.
overwrite=0;            // Перезапись файлов (совпадение имён). 0 - нет, 1 - да.
modify=0;               // Добавлять номер к имени файла (если запрещена
                        // перезапись и совпали имена). 0 - нет, 1 - да.

count=0;                // Счётчик скопированных файлов.
errors=0;               // Счётчик ошибок.
error_list=&quot;&quot;;          // Список неудач при копировании (не удалась
                        // перезапись, т.к. файл только для чтения).

fso=WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;);

if(!fso.FolderExists(from_folder)) {
  WScript.Echo(&quot;Не найдена папка-источник&quot;);
  WScript.Quit();
}
from_folder=fso.GetFolder(from_folder).Path; // На случай, если from_folder
                                             // была указана без соблюдения
                                             // регистра букв. В этом случае
                                             // метод replace не сработает.
copyFiles(from_folder);

if(errors) error_list=&quot;\n\nОшибок &quot;+errors+&quot;:\n&quot;+error_list;

WScript.Echo(&quot;Готово. Скопировано файлов: &quot;+count+error_list);


//=================================================================

function copyFiles(sourcepath)
{
  var folder=fso.GetFolder(sourcepath);
  var files=new Enumerator(folder.Files);

  for(; !files.atEnd(); files.moveNext()) {
    var file=files.item();
    var oldpath=file.Path;
    var ext=fso.GetExtensionName(oldpath);
    if(!ext) ext = &quot;\\?&quot;;
    var re = new RegExp(&quot;(?:^|,)&quot; + ext + &quot;(?:,|$)&quot;, &quot;i&quot;);
    if(!check_ext || re.test(ext_list)) {
      var newpath=makeNewPath(oldpath, ext);
      checkParents(newpath);
      try {
        file.Copy(newpath, overwrite);
        ++count;
      }
      catch(e) {
        if(overwrite) {
          ++errors;
          error_list+=oldpath+&quot; --&gt; &quot;+newpath+&quot;\n&quot;;
        }
      }
    }
  }
  if(!subfolders) return;
  var folders=new Enumerator(folder.SubFolders);
  for(; !folders.atEnd(); folders.moveNext()) copyFiles(folders.item().Path);
}

function checkParents(path)
{
  var parentpath=fso.GetParentFolderName(path);
  if(!fso.FolderExists(parentpath)) {
    checkParents(parentpath);
    fso.CreateFolder(parentpath);
  }
}

function makeNewPath(path, ext)
{
  if(all_together)
    var newpath=to_folder+&quot;\\&quot;+fso.GetFileName(path);
  else
    var newpath=path.replace(from_folder, to_folder);
  if(!overwrite &amp;&amp; modify) {
    var temppath=newpath.slice(0, -(ext.length+1))+&quot;_&quot;, i=0;
    while(fso.FileExists(newpath)) newpath=temppath+(++i)+&quot;.&quot;+ext;
  }
  return newpath;
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Wed, 10 Oct 2007 05:41:21 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=5427#p5427</guid>
		</item>
	</channel>
</rss>
