找不到vbs预定路径

时间:2013-03-05 04:36:50

标签: vbscript scheduled-tasks

我无法弄清楚我做错了什么。 我有一个批处理文件启动vbs脚本。 该脚本只是在一些文件中进行一些操作,比如移动它们,创建,删除...... 它工作正常。 执行bat它启动vbs脚本,一切正常。 bat文件只生成一个cscript file.vbs

问题是我已经安排了这个bat文件。 当时间到来时,它会被执行但我在vbs脚本中收到错误“path not found”。

这不是一个计划任务问题,因为我有11个任务正在运行批处理文件,它们运行得很顺畅,脚本被执行(我把控制器放在它上面)。 但是vbs脚本总是返回相同的路径找不到错误。

同样,如果我手动执行脚本,它会毫无问题地运行。

使用与手动执行文件相同的帐户安排任务,因此这不是权限问题。我只是双击批处理并运行,点击任务计划管理器上的执行,它就失败了。

该系统是Windows Server 2008 r2标准。 我已经尝试重启,删除和制作新任务......

感谢所有人

[UPDATE]

我在这里粘贴部分代码

文件:D:\ scripts \ conf.ini

[script1]
    fileA=D:\Rep\exportA.csv
    fileB=D:\Rep\exportB.csv
    fileC=D:\Rep\exportC.csv
    dirHistory=D:\Rep\history

FILE:D:\ scripts \ merge.vbs

Dim iniObj
Set iniObj=New ClsINI
If iniObj.OpenINIFile("D:\scripts\conf.ini") = False Then
    wLog("Impossible to read file ini")
    Set iniObj = Nothing
    Chiudi()
End If
Dim errIni,tmpVal
Dim fileA,fileB,fileC,dirHistory

errIni = iniObj.GetINIValue("script1", "fileA", fileA)
tmpVal = iniObj.GetINIValue("script1", "fileB", fileB)
errIni = errIni+tmpVal
tmpVal = iniObj.GetINIValue("script1", "fileC", fileC)
errIni = errIni+tmpVal
tmpVal = iniObj.GetINIValue("script1", "dirHistory", dirHistory)
errIni = errIni+tmpVal

If errIni > 0 Then
    wLog("Error loading file ini")
    wLog(errIni)
    iniObj.CloseINIFile()
    Set iniObj = Nothing
    Chiudi()
End If

wLog("File ini Caricato")

Dim objFso,posizioneFile,Fase
Dim arrElement,resArray,actionArray,cedoleArray,varArray ,i
Dim conn,rs,strCon
Dim maxPos,maxTemp
Dim objExcel, objSheet,cella

Set objFso = CreateObject("Scripting.FileSystemObject")

if objFso.FileExists(fileA) then
    objFso.DeleteFile(posizione)
    wLog("File posizione moved")
else
    wLog("File posizione not found")
end if

在此行a获取“未找到路径”的错误

Set posizioneFile = objFso.OpenTextFile(fileA, 8, True)

If not objFso.FileExists(fileB) then
    SendEmail("nego")
    Fase=false
Else
    Set tFile = objFso.OpenTextFile(fileB, 1)
    strFile=tFile.ReadAll

    tFile.Close
    posizioneFile.WriteLine strFile
    objFso.MoveFile fileB, dirHistory&"\Negoz_"& CreaId(2) & ".csv"
End If
posizioneFile.Close

文件:D:\ scripts \ merge.bat

echo Start Merge %date% %time% >> Started.log
cscript D:\scripts\merge.vbs

很抱歉,如果我之前没有提出,但我认为这是一个Windows问题,因为我认为代码很好。

由于

1 个答案:

答案 0 :(得分:1)

这听起来像工作目录的问题,虽然它有点难以辨别,因为您选择不显示批处理脚本的内容。如果手动启动脚本(通过双击),则工作目录是批处理脚本(也可能是VBScript)所在的目录。如果将批处理脚本作为计划任务运行,则工作目录为%SystemRoot%\system32,除非您在任务的属性中明确设置了工作目录。

现在,如果您的批处理脚本如下所示:

cscript.exe your.vbs

它将在工作目录中查找your.vbs,如果工作目录不是包含your.vbs的目录,则无法找到它。如果我假设两个脚本位于同一目录中是正确的,您可以在计划任务的属性中设置工作目录,或者(更好)将批处理脚本更改为以下内容:

cscript.exe "%~dp0your.vbs"

%0是调用批处理脚本本身的路径。 %~dp0%0扩展为父目录的绝对路径(包括尾部反斜杠)。