Тема: JScript: копирование файлов с заданными расширениями
Скрипт копирует из папки (а при желании и из всех её подпапок) файлы с указанными расширениями. Может копировать и все подряд. На новом месте воссоздаётся структура папок, в которых лежали файлы. Но может и не воссоздаваться. Смотрите настройки в начале скрипта.
from_folder="C:\\WSH"; // Откуда.
to_folder="D:\\Test"; // Куда. Если папка не существует, будет создана,
// и также все вышестоящие папки, если не существуют.
ext_list="txt,js,?"; // Список расширений. Если 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=""; // Список неудач при копировании (не удалась
// перезапись, т.к. файл только для чтения).
fso=WScript.CreateObject("Scripting.FileSystemObject");
if(!fso.FolderExists(from_folder)) {
WScript.Echo("Не найдена папка-источник");
WScript.Quit();
}
from_folder=fso.GetFolder(from_folder).Path; // На случай, если from_folder
// была указана без соблюдения
// регистра букв. В этом случае
// метод replace не сработает.
copyFiles(from_folder);
if(errors) error_list="\n\nОшибок "+errors+":\n"+error_list;
WScript.Echo("Готово. Скопировано файлов: "+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 = "\\?";
var re = new RegExp("(?:^|,)" + ext + "(?:,|$)", "i");
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+" --> "+newpath+"\n";
}
}
}
}
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+"\\"+fso.GetFileName(path);
else
var newpath=path.replace(from_folder, to_folder);
if(!overwrite && modify) {
var temppath=newpath.slice(0, -(ext.length+1))+"_", i=0;
while(fso.FileExists(newpath)) newpath=temppath+(++i)+"."+ext;
}
return newpath;
}