23 декабря 2009 г.

Скрипт чтения названий файлов в папках Windows

Бывает так, что нужно прочитать огромное количество названий файлов в папке и скопировать их или в файл или в буфер обмена. И соответствующие средства не всегда есть под рукой. Но в Windows есть замечательное стандартное средство для скриптования - Windows Script Host, базирующееся на JScript (клон JavaScript) и Visual Basic.

С Васиком (Basic :) ) я не дружу, а вот JScript - вполне по плечу. Вот и написал я простенький скриптик. Теперь можно и тотал коммандером для этих целей не пользоваться, т.к. в файл список названий файлов он не пишет, насколько я знаю.

Итак, вот ссылка на архив (1.08 Kb), а вот скрипт:
// define variables
var YESNO       = 4;
var QUESTION    = 32;

var sTitle      = "Filenames Reader Script";
var sFLName     = "!FileList.txt";
var sQuestion   = "For the create text file in current folder with filenames list:\n    press «YES»\n    else press «NO»\nIf you are click on «NO» button the filenames list copy to clipboard only.";
var sExecThis   = "© .p.i.x.e.l. 2009, http:\\\\www.pixel-tyumen.ru\n\nThis script is read filenames list in current folder.\nCopy this script in the folder that filenames list needed,\nand follow the instructions.\n\nScript is not malware!\n\nContinue?";
var sVariantOne = "Filenames of current folder was write to file " + sFLName + "\nand copy to clipboard.\n";
var sVariantTwo = "Filenames of current folder was write to clipboard.\n";
var sEndExec    = "\nEnd of script execution!";
var sForWrite   = "Current folder items ";
var sFilesList  = "";

// make clipboard object
function WriteClipboard (sText) {
    var sText;
    var oIE = new ActiveXObject("InternetExplorer.Application");
    oIE.navigate("about:blank");
    oIE.visible = 0;
    while (oIE.Busy) { WScript.Sleep(50); }
    oIE.Document.parentWindow.clipboardData.setData("Text", sText);
    oIE.Quit();
}

// make using objects
var oFileSystem = WScript.CreateObject("Scripting.FileSystemObject");

var oShell = WScript.CreateObject("WScript.Shell");
var sCurDir = oShell.CurrentDirectory;
var sThisFile = WScript.ScriptName;

var bExecThis = oShell.Popup(sExecThis, 0, sTitle, QUESTION|YESNO) == 6 ? true : false;
if (!bExecThis) WScript.Quit(0);

var oCurDir = oFileSystem.GetFolder(sCurDir);
var oCurFiles = oCurDir.Files;

// make files list
sForWrite += sCurDir + "\r\n";
var FilesEnum = new Enumerator(oCurFiles);
for (; !FilesEnum.atEnd(); FilesEnum.moveNext()) {
    var sFile = FilesEnum.item();
    if (sFile.Name != sFLName && sFile.Name != sThisFile)
        sFilesList += sFile.Name + "\r\n";
}

// dialog with user
var bMakeList = oShell.Popup(sQuestion, 0, sTitle, QUESTION|YESNO) == 6 ? true : false;

// make result
if (bMakeList) {
    var hTetxtFile = oCurDir.CreateTextFile(sFLName, true);
    hTetxtFile.WriteLine(sForWrite);
    var aFiles = sFilesList.split("\r\n");
    for (var i = 0; i < aFiles.length; i++) {
        hTetxtFile.WriteLine(aFiles[i]);
    }
    hTetxtFile.Close();
    WriteClipboard(sFilesList);
    WScript.Echo(sVariantOne + sEndExec);
} else {
    WriteClipboard(sFilesList);
    WScript.Echo(sVariantTwo + sEndExec);
}

Комментариев нет:

Отправить комментарий