0

私は自分が間違っていることを理解できません。vbs スクリプトを開始するバッチ ファイルがあります。スクリプトは、ファイルの移動、作成、削除など、一部のファイルでいくつかの操作を行うだけです...正常に動作します。バットを実行すると、vbs スクリプトが開始され、すべてが機能します。batファイルはcscript file.vbsを作成するだけです

問題は、このバッチ ファイルをスケジュールしたことです。時間になると実行されますが、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 に答える