2015-09-30 2 views
0

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

ответ

1

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

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

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

+0

Это действительно может быть точка. Я попробую это, как только пользователь будет в сети. Однако это должно быть «\\» не «\». – sander

+0

Строки Visual Basic не похожи на строки Java, например, единственный символ, который нуждается в экранировании, «и вы избегаете его как« »в строке – user5035265

+0

Я не уверен насчет VB, но, согласно MSDN, должны быть двойные обратные косые черты (например, «C: \\ myfolder \\») в путях файлов, а не в одиночных (WSH выдает исключение, когда вы пытаетесь использовать пути с одиночными backslasges). – sander

Смежные вопросы