2013-03-05 5 views
0

Я не могу понять, что я делаю неправильно. У меня есть командный файл, начинающий скрипт vbs. Скрипт просто выполняет некоторые операции в некоторых файлах, например, перемещает их, создает, удаляет ... Все работает отлично. Выполнение биты начинается скрипт vbs и все работает. Файл bat просто делает cscript file.vbsvbs запланированный путь не найден

Проблема в том, что я запланировал этот файл bat. Когда придет время, оно выполняется, но я получаю ошибку «путь не найден» в скрипте vbs.

Это не проблема задачи расписания, потому что у меня есть 11 задач, выполняющих пакетные файлы, и они запускаются сглаженно, и скрипт выполняется (я поставил на него контроллеры). Но скрипт vbs всегда возвращает тот же путь, что и не найденная ошибка.

Опять же, если я запускаю скрипт вручную, он работает без проблем.

Задача назначается с той же учетной записью, которую я использую для ручной работы с файлом, поэтому это не проблема разрешения. Я просто дублирую пакет и запускаю его, нажимаю на выполнение в диспетчере расписания задач, и он терпит неудачу.

Система является стандартом Windows Server 2008 r2. я уже пытался перезагрузить, удалить и сделать новую задачу ....

Спасибо всем

[UPDATE]

Я здесь вставить часть кода

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

На этой линии получить ошибку "Путь не найден"

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: \ Scripts \ merge.bat

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

Извините, если я не ставил его раньше, но я думал, что это проблема с окнами, потому что я думал, что код в порядке.

Благодаря

+0

Какова ценность 'fileA', когда вы получаете эту ошибку? Добавьте строку 'WScript.Echo fileA' перед строкой, которая вызывает ошибку, и проверьте, если: a) вы получаете абсолютный путь и b) путь существует. Если вы получите относительный путь, проверьте рабочий каталог ('WScript.Echo objFso.GetAbsolutePathName (". ")'), Если путь существует внутри него. –

+0

Я уже пытался повторить значение переменной, и он показывает правильный абсолютный путь, и он существует. Я попытался отладить все, что мог, но все кажется прекрасным. Я даже попытался сделать еще одну партию, выполняющую файл merge.bat. И это работает. Но после этого он возвращает ошибку. Я думал переписать все на python, но не люблю оставлять нерешенные вещи, и есть 800 строк кода для конвертирования ... – Dario

+0

Дважды проверьте это, вставив строку 'WScript.Echo objFso.FileExists (fileA): WScript.Echo objFso.FolderExists (objFso.GetParentFolderName (fileA)) '. Также дважды проверьте, что 'fileA' содержит фактическое имя файла (т. Е. Не имеет завершающего' '\' '). –

ответ

1

Это звучит как вопрос с рабочей директории, хотя это немного трудно сказать, так как вы решили не показывать содержимое пакетного сценария. Если вы запустите скрипт вручную (двойным щелчком), рабочий каталог - это каталог, в котором находится пакетный скрипт (и, вероятно, VBScript). Если вы запускаете пакетный скрипт в качестве запланированной задачи, рабочий каталог %SystemRoot%\system32, если вы явно не задали рабочий каталог в свойствах задачи.

Теперь, если ваша партия сценарий выглядит следующим образом:

cscript.exe your.vbs 

он будет искать your.vbs в рабочем каталоге и не найти его, если рабочий каталог не является каталогом, содержащий your.vbs.Если мое предположение, что оба скрипта в том же каталоге, правильно вы можете либо установить рабочий каталог в свойствах запланированной задачи или (лучше) изменить пакетный скрипт, чтобы что-то вроде этого:

cscript.exe "%~dp0your.vbs" 

%0 является путь к самому пакетному скрипту, который был вызван. %~dp0 расширяет %0 до абсолютного пути родительского каталога (включая трейлинг-обратную косую черту).

+0

Привет, спасибо за ответ. Я не показывал командный файл, потому что это просто эхо-дата >> activate.log и cscript file.vbs. Я установил рабочий каталог в расписании задач, а ошибка не в пакете, а в vbs. Пакет начинается нормально, и он выполняет vbs, но это путь в vbs, который не найден – Dario

+0

Пожалуйста, обновите свой вопрос кодом (VBScript). Мы не играем в угадывание игр здесь. –

Смежные вопросы