0

これが私がやろうとしていることです。

このスクリプトは、コンピューター名のテキスト ファイルを一度に 1 つずつ読み取ります。

program.lnk が存在するかどうかを確認します。リンクが存在する場合は、新しいリンクをそのコンピューター/ユーザー プロファイルにコピーします。次に、新しいテキスト ファイルにコンピュータ名とプログラムが存在することを記録します。次に、元の program.lnk ファイルを削除します。

program.lnk が存在しない場合、同じテキスト ファイルにコンピュータ名とプログラムが存在しないことが記録されます。

その後、scipt はリスト内の次のコンピューター名に移動します。

ComputerListModified.txt ファイルが存在しない場合は作成するのに問題がありますが、存在する場合はファイルを追加します。

これが私が持っているコードです....

InputFile = "C:\scripts\computers.txt"
Const DeleteReadOnly = True
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(InputFile)
Do While Not (objFile.AtEndOfStream)
strComputer = objFile.ReadLine
For Each objsubfolder In objFSO.GetFolder("\\" & strComputer & "\c$\Documents and    Settings\").subfolders

If objFSO.FileExists(objsubfolder.Path & "\desktop\Wellcore Operations.LNK") Then
objFSO.CopyFile "\\pc01130\c$\scripts\Wellcore OperationsReadOnly.lnk", (objsubfolder.Path & "\desktop\")
outFile="c:\scripts\ComputerListModified.txt"
Set objFile = objFSO.CreateTextFile(outFile,True)
objFile.Write strComputer: objFile.Write  " This Computer had Wellcore Operations" & vbCrLf
objFile.Close

Else

outFile="c:\scripts\ComputerListModified.txt"
Set objFile = objFSO.CreateTextFile(outFile,True)
objFile.Write strComputer: objFile.Write " This Computer did not have Wellcore Operations" & vbCrLf
objFile.Close

End If

If objFSO.FileExists(objsubfolder.Path & "\desktop\Wellcore Operations.LNK") Then
objFSO.DeleteFile (objsubfolder.Path & "\desktop\Wellcore Operations.LNK")

End If
Next
Loop

MsgBox "Done"
4

1 に答える 1

1

(深くネストされた) 繰り返されるアクションで関連する事実をログに記録する場合は、最も内側のループでファイルに書き込む必要があります。ただし、ファイルの準備 (およびクローズ) は最上位のタスクであり、ループ内で行うべきではありません。

ゲイツ氏は .OpenTextFile メソッドを正しく設計しました。.FileExists チェックなしで使用できます。

デモコード:

Option Explicit

Const ForAppending = 8

Dim goFS  : Set goFS  = CreateObject("Scripting.FileSystemObject")
Dim gsLog : gsLog     = ".\logdemo.log"
WScript.Echo gsLog, "exists:", CStr(goFS.FileExists(gsLog))
'                           .OpenTextFile(filename[, iomode[, create[, format]]])
Dim goLog : Set goLog = goFS.OpenTextFile(gsLog, ForAppending, True)
goLog.WriteLine Now & " start"

Dim sComputer
For Each sComputer In Split("alpha beta gamma")
    Dim sFolder
    For Each sFolder in Split("A B C")
        goLog.WriteLine Join(Array(Now, sComputer, sFolder))
    Next
Next

goLog.WriteLine Now & " end"
goLog.WriteLine "-------------------------"
goLog.Close

出力:

cscript logdemo.vbs
.\logdemo.log exists: False

type logdemo.log
6/12/2013 9:25:26 PM start
6/12/2013 9:25:26 PM alpha A
6/12/2013 9:25:26 PM alpha B
6/12/2013 9:25:26 PM alpha C
6/12/2013 9:25:26 PM beta A
6/12/2013 9:25:26 PM beta B
6/12/2013 9:25:26 PM beta C
6/12/2013 9:25:26 PM gamma A
6/12/2013 9:25:26 PM gamma B
6/12/2013 9:25:26 PM gamma C
6/12/2013 9:25:26 PM end
-------------------------

cscript logdemo.vbs
.\logdemo.log exists: True

type logdemo.log
6/12/2013 9:25:26 PM start
6/12/2013 9:25:26 PM alpha A
6/12/2013 9:25:26 PM alpha B
6/12/2013 9:25:26 PM alpha C
6/12/2013 9:25:26 PM beta A
6/12/2013 9:25:26 PM beta B
6/12/2013 9:25:26 PM beta C
6/12/2013 9:25:26 PM gamma A
6/12/2013 9:25:26 PM gamma B
6/12/2013 9:25:26 PM gamma C
6/12/2013 9:25:26 PM end
-------------------------
6/12/2013 9:26:00 PM start
6/12/2013 9:26:00 PM alpha A
6/12/2013 9:26:00 PM alpha B
6/12/2013 9:26:00 PM alpha C
6/12/2013 9:26:00 PM beta A
6/12/2013 9:26:00 PM beta B
6/12/2013 9:26:00 PM beta C
6/12/2013 9:26:00 PM gamma A
6/12/2013 9:26:00 PM gamma B
6/12/2013 9:26:00 PM gamma C
6/12/2013 9:26:00 PM end
-------------------------
于 2013-06-12T19:36:07.143 に答える