Windows 脚本宿主 "cannot find file" 仅在 windows XP 中出现异常
Windows Script Host "cannot find file" exception in windows XP only
代码:
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 中抛出异常 "file not found"(或类似的东西)并说 "in line 22"。脚本中的第 22 行是 "cur_file=..." 和 "new_file=..." 之间的空行。
谁能告诉我这是怎么回事? XP 的 OpenAsTextStream
和 OpenTextFile
方法有什么区别(调用者除外)?
我的猜测是 CreateTextFile
或 OpenTextFile
方法搞砸了,例如 WinXP 中的另一个正确的方法名称或 WinXP 中的不同路径或其他东西。不幸的是我没有 WinXP,无法正确测试它。
UPD:刚刚注意到我在第 15 行中缺少一个分号。这可能是造成这种行为的原因吗? (我怀疑)
尝试用反斜杠替换斜杠,例如:
cur_file = fso.OpenTextFile(in_path + '\' + fitem.Name, 1);
如果有效,Win7 可能会自动规范化文件路径。
代码:
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 中抛出异常 "file not found"(或类似的东西)并说 "in line 22"。脚本中的第 22 行是 "cur_file=..." 和 "new_file=..." 之间的空行。
谁能告诉我这是怎么回事? XP 的 OpenAsTextStream
和 OpenTextFile
方法有什么区别(调用者除外)?
我的猜测是 CreateTextFile
或 OpenTextFile
方法搞砸了,例如 WinXP 中的另一个正确的方法名称或 WinXP 中的不同路径或其他东西。不幸的是我没有 WinXP,无法正确测试它。
UPD:刚刚注意到我在第 15 行中缺少一个分号。这可能是造成这种行为的原因吗? (我怀疑)
尝试用反斜杠替换斜杠,例如:
cur_file = fso.OpenTextFile(in_path + '\' + fitem.Name, 1);
如果有效,Win7 可能会自动规范化文件路径。