2015-09-30 19 views
0

代碼:Windows腳本宿主在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); 

與腳本文件夾包含inputoutput文件夾,在文件夾input一些樣品。

我需要它在WinXP中工作。

腳本在Win7中完美工作,但用戶聲稱在Windows XP中拋出異常「找不到文件」(或類似的東西),並說「在第22行」。腳本中的第22行是「cur_file = ...」和「new_file = ...」之間的空行。

誰能告訴我這有什麼問題嗎?對於XP(調用者除外),OpenAsTextStreamOpenTextFile方法之間是否有任何區別?

我的猜測是,它有一些與CreateTextFileOpenTextFile方法像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會引發異常)。 – sander

相關問題