2013-03-05 3 views
0

내가 뭘 잘못하고 있는지 알 수 없습니다. vbs 스크립트를 시작하는 배치 파일이 있습니다. 스크립트는 파일 이동, 생성, 삭제와 같은 일부 파일에서 일부 작업을 수행합니다 ... 잘 작동합니다. 박쥐를 실행하면 vbs 스크립트가 시작되고 모든 것이 작동합니다. 박쥐 파일은 단지 cscript 파일을 만듭니다.예약 된 경로를 찾을 수없는 vbs

문제는이 박쥐 파일을 예약했기 때문입니다. 시간이 다가 오면 실행되지만 vbs 스크립트에서 "path not found"오류가 발생합니다.

일괄 작업을 실행하는 11 개의 작업이 있고 매끄럽게 실행되고 스크립트가 실행되므로 (내가 컨트롤러를 넣었습니다) 일정 작업 문제가 아닙니다. 그러나 vbs 스크립트는 항상 동일한 경로를 찾을 수 없음 오류를 반환합니다.

다시 스크립트를 수동으로 실행하면 문제없이 실행됩니다.

작업이 수동으로 파일을 실행하는 데 사용하는 것과 동일한 계정으로 예약되므로 권한 문제가 아닙니다. 방금 배치를 두 번 클릭하면 실행되고 작업 스케줄 관리자에서 실행을 클릭하면 실패합니다.

시스템은 Windows Server 2008 R2 표준입니다. 은 이미 모든 사람에게 ....

감사를 삭제하고 새 작업을하고, 다시 부팅을 시도

[업데이트]

내가 여기 코드의 일부 붙여

FILE : 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 

0 것은 "을 (를) 찾을 수 없습니다 경로"의 오류

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 

FILE : D :

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

죄송합니다 \ 스크립트 \ merge.bat 나는 그것을 넣어하지 않은 경우 전에는 코드가 괜찮다고 생각했기 때문에 Windows 문제라고 생각했습니다.

감사

+0

오류가 발생하면'fileA'의 값은 무엇입니까? 오류를 발생시키는 행 앞에'WScript.Echo fileA' 행을 추가하고 a) 절대 경로를 얻고 b) 경로가 있는지 확인하십시오. 상대 경로를 얻은 경우 경로가 내부에 존재하면 작업 디렉토리 ('WScript.Echo objFso.GetAbsolutePathName (".")')를 확인하십시오. –

+0

이미 변수 값을 에코하려고했는데 올바른 절대 경로를 보여 주며 존재합니다. 내가 할 수있는 모든 디버깅을 시도했지만 모든 것이 잘 보입니다. 나는 심지어 다른 배치가 merge.bat를 실행하도록 시도했다. 그리고 그것은 작동합니다. 그러나 일단 예정되면 오류를 반환합니다. 파이썬에서 모든 것을 다시 작성하려고 생각했지만 해결되지 않은 것들을 남기고 싶지 않고 변환 할 800 줄의 코드가 있습니다 ... – Dario

+0

'WScript.Echo objFso.FileExists (fileA) : WScript.Echo objFso.FolderExists (objFso.GetParentFolderName (fileA))'. 또한'fileA'가 실제 파일 이름을 포함한다는 것을 다시 한번 확인하십시오 (즉,''\''이 없습니다). –

답변

1

이것은 당신이 배치 스크립트의 내용을 표시하지 않도록 선택하기 때문에, 말할 조금 어렵더라도 작업 디렉토리에 문제처럼 들린다. 스크립트를 수동으로 시작한 경우 (더블 클릭) 작업 디렉토리는 배치 스크립트 (및 아마도 VBScript도 포함)가 상주하는 디렉토리입니다. 일괄 처리 스크립트를 예약 된 작업으로 실행하면 작업 속성에 작업 디렉터리를 명시 적으로 설정하지 않는 한 작업 디렉터리는 %SystemRoot%\system32입니다.

지금, 당신의 배치 스크립트는 다음과 같습니다 경우 :이 작업 디렉토리에 your.vbs를 찾습니다 및 작업 디렉토리가 your.vbs을 포함하는 디렉토리가없는 경우를 발견 할 수는 없을 것이다

cscript.exe your.vbs 

.

cscript.exe "%~dp0your.vbs" 

%0이있다 : 두 스크립트가 같은 디렉토리에있는 나의 가정이 맞다면 당신은 이런 식으로 뭔가를 배치 스크립트를 변경하려면 예약 된 작업 또는 (더 나은)의 속성에서 작업 디렉토리를 설정할 수 있습니다 중 배치 스크립트 자체의 경로. %~dp0%0을 부모 디렉토리의 절대 경로 (후행 백 슬래시 포함)로 확장합니다.

+0

안녕하세요, 답변 주셔서 감사합니다. 나는 batch 파일을 보여주지 않았다. 왜냐하면 그것은 단지 date >> activate.log와 cscript file.vbs를 반향시키기 때문이다. 작업 일정에 작업 디렉토리를 설정했는데 오류가 배치에 있지만 vbs에는 없습니다. 일괄 처리가 정상적으로 시작되고 vbs를 실행하지만 찾을 수없는 vbs의 경로입니다 – Dario

+0

(VBScript) 코드로 질문을 업데이트하십시오. 우리는 여기서 게임을 추측하지 않습니다. –

관련 문제