4

私のコード セグメントでは、ファイル名をスクリプト化すると、次の行でアクセス許可が拒否されます。

Set objTextFile = objFSO.OpenTextFile(strDirectory & strFile, ForAppending, True)

ここにスクリプトがあります

'output log info
Function OutputToLog (strToAdd)  
    Dim strDirectory,strFile,strText, objFile,objFolder,objTextFile,objFSO
    strDirectory = "c:\eNet"
    strFile = "\weeklydel.bat"
    'strText = "Book Another Holiday"
    strText = strToAdd

    ' Create the File System Object
    Set objFSO = CreateObject("Scripting.FileSystemObject")

    ' Check that the strDirectory folder exists
    If objFSO.FolderExists(strDirectory) Then
       Set objFolder = objFSO.GetFolder(strDirectory)
    Else
       Set objFolder = objFSO.CreateFolder(strDirectory)
       'WScript.Echo "Just created " & strDirectory
    End If

    If objFSO.FileExists(strDirectory & strFile) Then
       Set objFolder = objFSO.GetFolder(strDirectory)
    Else
       Set objFile = objFSO.CreateTextFile(strDirectory & strFile)
       'Wscript.Echo "Just created " & strDirectory & strFile
    End If

    set objFile = nothing
    set objFolder = nothing
    ' OpenTextFile Method needs a Const value
    ' ForAppending = 8 ForReading = 1, ForWriting = 2
    Const ForAppending = 2

    Set objTextFile = objFSO.OpenTextFile(strDirectory & strFile, ForAppending, True)

    ' Writes strText every time you run this VBScript
    objTextFile.WriteLine(strText)
    objTextFile.Close
End Function

vbscript ドメイン管理者のアクセス許可を割り当てました。何か案は?

前もって感謝します

4

5 に答える 5

11

これは、ファイルのアクセス許可自体とは関係ないと思います。以下を使用してファイルを作成したという事実に関係しています。

Set objFile = objFSO.CreateTextFile(strDirectory & strFile)

それはファイルを作成します...そしてそのファイルへの参照を運びます(objFile)

次に、参照を破棄する前にファイルを閉じません

...
'Missing objFile.Close here
Set objFile = nothing
Set objFolder = nothing
...

その結果、参照は破棄されますが、テキストストリームはメモリ内で開いたままになり、ファイルがロックされます。

次に、ファイルが既に「開いている」間にファイルを再度開こうとしています。これは少し長くなりました。ファイルを作成した後、すでに参照を取得しています。別の参照を作成する前に参照を破棄するよりも、その参照に直接書き込む方が簡単です。

于 2008-12-15T18:33:27.943 に答える
2

その価値のために...

次の行のために、許可エラーがあると確信しました。

Set LogFile = LogFSO.OpenTextFile(LogFileName, ForWriting, True)

それは、「許可が拒否されました」エラーが指していた行だからです。しかし、実際には、私の許可エラーはさらに数行下にありました。

WshShell.AppActivate(ScreensToRemove(i))
WshShell.SendKeys ("~")
WScript.Sleep(1000)

そのようなキャプションが表示された画面はありませんでしたので、SendKeys には許可がありませんでした。

もちろん、解決策は次のとおりです。

If WshShell.AppActivate(ScreensToRemove(i)) = True Then
   WshShell.SendKeys ("~")
   WScript.Sleep(1000)
End if

それが役立つことを願っています。

于 2009-12-01T13:22:51.077 に答える
1

私の特定のケースでは、以前に存在していたファイルで、Everyone ユーザーに許可を与えるだけで済みました。

于 2015-12-02T22:35:16.933 に答える
1

また、ファイルを Excel で開いていないことを確認してください (.csv ファイルでこの問題が発生しました)...

于 2015-05-19T00:47:27.437 に答える
0

バラバスターはまさにその通りです。書き込みのためにもう一度開く前にファイルを閉じるか、既存の開いているハンドルを使用する必要があります。

于 2008-12-19T02:23:17.493 に答える