Код:
var regs = {'E':/[e]/g};//in real code here are actual regular expressions
var fso = new ActiveXObject("Scripting.FileSystemObject");
var objShell = new ActiveXObject("Shell.Application");
var lib, new_file;
var cur_path = WScript.ScriptFullName.substring(0, WScript.ScriptFullName.length - WScript.ScriptName.length);
in_path = cur_path+'input';
out_path = cur_path+'output/';
lib = objShell.NameSpace(in_path);
items = lib.Items()
n=0;
for (i=0;i<items.Count;i++)
{
fitem = items.Item(i);
cur_file = fso.OpenTextFile(in_path + '/' + fitem.Name, 1);
new_file = fso.CreateTextFile(out_path + fitem.Name, true);
while (cur_file.AtEndOfStream == false) {
var line = cur_file.ReadLine();
for (key in regs) {
line = line.replace(regs[key], key );
}
new_file.WriteLine(line);
}
cur_file.Close();
new_file.Close();
n++;
}
WScript.Echo("Total files found/converted:" + i + "/" + n);
Папка со скриптом содержит папки input
и output
с некоторыми семплами в папке input
.
Мне нужно, чтобы он работал в WinXP.
Скрипт отлично работает в Win7, однако пользователь утверждает, что в Windows XP выдается исключение "файл не найден" (или что-то подобное) и говорит "в строке 22". 22-я строка в скрипте пустая между "cur_file=..." и "new_file=...".
Кто-нибудь может сказать мне, что с этим не так? Есть ли разница между методами OpenAsTextStream
и OpenTextFile
для XP (кроме вызывающего)?
Я предполагаю, что он что-то испортил с методом CreateTextFile
или OpenTextFile
, например, другое правильное имя метода в WinXP или другой путь в WinXP или что-то еще. К сожалению, у меня нет WinXP, и я не могу его проверить.
UPD: Только что заметил, что в строке 15 пропущена точка с запятой. Может ли это быть причиной такого поведения? (Я сомневаюсь в этом)