Windows Script Host не может найти исключение файла только в Windows XP

Код:

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 пропущена точка с запятой. Может ли это быть причиной такого поведения? (Я сомневаюсь в этом)


person sander    schedule 30.09.2015    source источник


Ответы (1)


Попробуйте заменить косую черту обратной косой чертой, например:

cur_file = fso.OpenTextFile(in_path + '\' + fitem.Name, 1);

Если это работает, Win7, вероятно, автоматически нормализует пути к файлам.

person user5035265    schedule 30.09.2015
comment
Это действительно может быть точкой. Я попробую это, как только пользователь будет в сети. Однако это должно быть \\ не \. - person sander; 30.09.2015
comment
Строки Visual Basic не похожи на строки Java, например, единственный символ, который необходимо экранировать, и вы экранируете его, как в строке - person user5035265; 24.10.2015
comment
Я не уверен насчет VB, но, согласно MSDN, в путях к файлам должны быть двойные обратные косые черты (например, C:\\myfolder\\), а не одиночные (WSH выдает исключение, когда вы пытаетесь использовать пути с одиночными обратными косыми чертами). ). - person sander; 06.11.2015