0

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

问题是我已经安排了这个 bat 文件。时机成熟时,它会被执行,但我在 vbs 脚本中收到错误“找不到路径”。

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

同样,如果我手动执行脚本,它运行没有问题。

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

该系统是windows server 2008 r2标准。我已经尝试重新启动,删除并创建新任务....

谢谢大家

[更新]

我在这里粘贴部分代码

文件:D:\scripts\conf.ini

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

文件: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

在这一行得到“找不到路径”的错误

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 问题,因为我认为代码很好。

谢谢

4

1 回答 1

1

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

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

cscript.exe your.vbs

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

cscript.exe "%~dp0your.vbs"

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

于 2013-03-05T08:35:47.317 回答