2013-03-05 110 views
0

我無法弄清楚我做錯了什麼。 我有一個批處理文件啓動一個VBS腳本。 該腳本只是在一些文件中進行一些操作,如移動它們,創建,刪除... 它工作正常。 執行bat啓動vbs腳本,一切正常。 BAT文件只是使一個CSCRIPT file.vbsvbs調度路徑未找到

的問題是,我已經安排這個bat文件。 當時間到了,它會被執行,但在vbs腳本中出現「路徑未找到」的錯誤。

這不是一個計劃任務的問題,因爲我已經11個任務運行的批處理文件和他們smootly運行,並執行腳本(我把控制器就可以了)。 但是,vbs腳本始終返回相同的路徑找不到錯誤。

同樣,如果我手動執行該腳本,它運行沒有問題。

任務計劃與我使用手動執行該文件相同的帳戶,所以它不是一個權限問題。我只需雙擊批處理並運行它,單擊任務計劃管理器上的執行就會失敗。

系統爲Windows Server 2008 R2的標準。 我已經嘗試過重新啓動,刪除及創建一個新的任務....

感謝大家

[更新]

我貼在這裏的部分代碼

文件:d: \腳本\ conf.ini

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

文件:d:\腳本\ 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:\腳本\ merge.bat

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

很抱歉,如果我沒有把它之前,但我認爲這是一個Windows問題,因爲我認爲代碼很好。

感謝

+0

當你遇到錯誤時'fileA'的值是多少?在引發錯誤的行之前添加一行'WScript.Echo fileA',並檢查a)是否獲得絕對路徑和b)路徑是否存在。如果你得到一個相對路徑,檢查工作目錄('WScript.Echo objFso.GetAbsolutePathName(「。」)')如果路徑存在於其中。 – 2013-03-06 22:57:29

+0

我已經嘗試回顯變量值,並顯示正確的絕對路徑,它存在。我試着調試所有我能做的,但一切似乎都很好。我甚至試過讓另一批執行merge.bat。它的工作原理。但一旦計劃它返回錯誤。我想在Python中重寫所有內容,但不喜歡留下未解決的事情,並且有800行代碼要轉換... – Dario 2013-03-07 08:47:08

+0

通過插入一行'WScript.Echo objFso.FileExists(fileA)來仔細檢查: WScript.Echo objFso.FolderExists(objFso.GetParentFolderName(fileA))'。再仔細檢查一下'fileA'是否包含一個實際的文件名(即沒有尾部''''')。 – 2013-03-07 12:12:06

回答

1

這聽起來像的工作目錄,雖然這是一個有點難以啓齒,因爲你選擇了不顯示批處理腳本的內容的問題。如果手動啓動腳本(通過雙擊),工作目錄是批處理腳本(也可能是VBScript)所在的目錄。如果將批處理腳本作爲計劃任務運行,則工作目錄爲%SystemRoot%\system32,除非您明確設置了任務屬性中的工作目錄。

現在,如果你的批處理腳本是這樣的:

cscript.exe your.vbs 

它會尋找your.vbs在工作目錄,並不會找到它,如果工作目錄是不包含your.vbs的目錄。如果我的假設是兩個腳本是在同一目錄下是正確的,你既可以將工作目錄設置在計劃任務或(更好)的性質改變批處理腳本是這樣的:

cscript.exe "%~dp0your.vbs" 

%0是調用批處理腳本本身的路徑。 %~dp0%0擴展爲父目錄的絕對路徑(包括尾部反斜槓)。

+0

嗨,謝謝你的回答。我沒有顯示批處理文件,因爲它只是echo date >> activate.log和cscript file.vbs。我已經在任務計劃中設置了工作目錄,錯誤不在批處理中,而是在vbs中。批處理正常啓動,它執行vbs,但它是vbs中找不到的路徑 – Dario 2013-03-05 14:48:49

+0

請使用(VBScript)代碼更新您的問題。我們不是在這裏玩猜謎遊戲。 – 2013-03-05 17:24:30