我无法弄清楚我做错了什么。 我有一个批处理文件启动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问题,因为我认为代码很好。
由于
答案 0 :(得分:1)
这听起来像工作目录的问题,虽然它有点难以辨别,因为您选择不显示批处理脚本的内容。如果手动启动脚本(通过双击),则工作目录是批处理脚本(也可能是VBScript)所在的目录。如果将批处理脚本作为计划任务运行,则工作目录为%SystemRoot%\system32
,除非您在任务的属性中明确设置了工作目录。
现在,如果您的批处理脚本如下所示:
cscript.exe your.vbs
它将在工作目录中查找your.vbs
,如果工作目录不是包含your.vbs
的目录,则无法找到它。如果我假设两个脚本位于同一目录中是正确的,您可以在计划任务的属性中设置工作目录,或者(更好)将批处理脚本更改为以下内容:
cscript.exe "%~dp0your.vbs"
%0
是调用批处理脚本本身的路径。 %~dp0
将%0
扩展为父目录的绝对路径(包括尾部反斜杠)。