Xameleon пишет:2) В аттаче приложил свой вариант решения. К сожалению через ActiveX, но
Большое спасибо! Попробую использовать в решении с манифестом.
alexii пишет:JSman, а зачем распаковывать строку в бинарник? Почему не сразу System.IO.File и методы «.SetCreationTime()», «.SetLastAccessTime()», «.SetLastWriteTime()»?
alexii, не хочетсядополнительной регистрации сборок в реестре, в том числе System. Решение с компиляцией меня больше устраивает, хотя бы по той причине, что скорость выполнения кода JScript.NET быстрее в WSH, да и никакой регистрации не надо.
Xameleon пишет:JSman
1) Можно взглянуть на пример ? Уж очень интересная и вкусная тема.
Xameleon, привожу черновой вариант решения. Хочу отметить, что данное решение пашет из-под учетной записи Гость.
Параметры функции FileSetTime
1. root - каталог, в котором будет осуществляться поиск файлов.
2. mask - маска поиска файла. может быть строкой, в которой используются классические * и ?. А также mask может быть регулярным выражением.
3. date - строковое представление даты и времени. YYYYMMDDHHMMSS.
4. deep - флаг рекурсии.
Function.prototype.GetResource = function (ResourceName)
{
if (!this.Resources)
{
var UnNamedResourceIndex = 0, _this = this;
this.Resources = {};
function f(match, resType, Content)
{
_this.Resources[(resType=="[[")?UnNamedResourceIndex++:resType.slice(1,-1)] = Content;
}
this.toString().replace(/\/\*(\[(?:[^\[]+)?\[)((?:[\r\n]|.)*?)\]\]\*\//gi, f);
}
return this.Resources[ResourceName];
}
function GetResource(ResourceName)
{
return arguments.callee.caller.GetResource(ResourceName);
}
var FSO = fso = new ActiveXObject("Scripting.FileSystemObject");
var WshShell= new ActiveXObject("WScript.Shell");
function FileSetTime(root, mask, datestring, typeOfFunction, deep)
{
/*[FileSetTime[
import System.Environment;
import System.IO;
// searches files by a string type classic mask or regexp type mask. if in-param "callback" is undefined function returns an array of found pathes.
function Search(root, re, callback, deep)
{
var e, files=[], dirs=[], result=[];
if (!root) root = Directory.GetCurrentDirectory();
if (!re) re = /./;
if (typeof re == "string" && /^\/.*\/[gmi ]*$/.test(re))
{
var m = re.match(/(^\/.*\/)([gmi ]*)$/i);
re = new RegExp(m[1].replace(/^\/|\/$/g,""), m[2]);
}
if (typeof re == "string") re = new RegExp("("+re.replace(/[\^\\\*\[\]\{\}\(\)\$]/g, "\\$&").replace(/\|/g,")|(").replace(/\?/g, ".").replace(/(\*)/g, ".*")+"$)", "gi");
if (!callback) callback = function (a){result.push(a)};
if (typeof deep=="undefined") deep = true;
deep = !!deep;
try
{
files = Directory.GetFiles(root);
for (var i=0, l=files.length; i<l; i++)
{
if (re.test(files[i])) callback(files[i]);
}
if (!deep) return result;
dirs = Directory.GetDirectories(root);
for (var i=0, l=dirs.length; i<l; i++)
{
try {
Search(dirs[i], re, callback);
} catch (e){ };
}
}
catch (e) {}
return result;
}
var root, mask, deep, datestring;
var params = System.Environment.GetCommandLineArgs();
// root, mask, dateString, typeOfFunction {0,1,2}, deep{true|false}
if (params.length!=6) System.Environment.Exit();
var dateMatch = (params[3]+"00000000000000").match(/^(....)(..)(..)(..)(..)(..)/);
var date = new Date(dateMatch[1], dateMatch[2]-1, dateMatch[3], dateMatch[4], dateMatch[5], dateMatch[6]);
function SetCreationTime(path)
{
var e; try {File.SetCreationTime(path, date)} catch (e) {};
}
function SetLastAccessTime(path)
{
var e; try {File.SetLastAccessTime(path, date)} catch (e) {};
}
function SetLastWriteTime(path)
{
var e; try {File.SetLastWriteTime(path, date)} catch (e) {};
}
var funcs = [SetLastWriteTime, SetCreationTime, SetLastAccessTime];
Search(params[1], params[2], funcs[params[4] % 3], params[5]);
]]*/
function CreateApp()
{
var path = WshShell.ExpandEnvironmentStrings("%TMP%\\test.txt");
try {
var f = fso.CreateTextFile(path,true);
f.WriteLine(FileSetTime.GetResource("FileSetTime"));
f.Close();
var CurrentDirectory = WshShell.CurrentDirectory;
WshShell.CurrentDirectory = WshShell.ExpandEnvironmentStrings("%TMP%");
WshShell.Run("%WINDIR%\\Microsoft.NET\\Framework\\v2.0.50727\\jsc %TMP%\\test.txt", 0, 1);
WshShell.CurrentDirectory = CurrentDirectory;
}
catch (e) {}
}
if (!root) root = WshShell.CurrentDirectory;
if (!mask) mask = "";
if (!datestring) datestring="1970010100000000";
if (typeof typeOfFunction=="undefined") typeOfFunction = 0;
if (typeof deep == "undefined") deep = 1;
if (!FSO.FileExists(WshShell.ExpandEnvironmentStrings("%TMP%\\test.exe"))) {CreateApp();}
if (FSO.FileExists(WshShell.ExpandEnvironmentStrings("%TMP%\\test.exe")))
WshShell.Run("%TMP%\\test.exe "+'"'+[root, mask, datestring, typeOfFunction, deep].join('" "')+'"', 0, 1);
}
FileSetTime(WshShell.ExpandEnvironmentStrings("%TMP%"), "*.txt", "199212010000");