0

Windowsフォルダーを移動するためにVBscriptを作成しましたが、ユーザーが開いているフォルダーに到達するとスクリプトがスタックします。開いているフォルダーをスキップし、開いているファイルをスキップするようにスクリプトを変更する方法はありますか?


Dim fso, directory, item, group, dateStamp, NumberFilesDeleted, text, MoveFoldersErrorInfo, MoveFilesErrorInfo, objLogFile

On error resume Next 

Set fso = CreateObject("Scripting.FileSystemObject")

'Move folders in the temp folder to To_Be_Deleted folder and check for errors
fso.MoveFolder "E:\Projects\temp\*" , "E:\Projects\To_Be_Deleted"
If Err.Number <> 0 Then
   MoveFoldersErrorInfo =  "Error: " & Err.Number & " Error (Hex): " & Hex(Err.Number) & Err.Source & " Description: "  & Err.Description
   Err.Clear
End If

'Move files in the temp folder to To_Be_Deleted folder and check for errors
fso.MoveFile "E:\Projects\temp\*" , "E:\Projects\To_Be_Deleted"
If Err.Number <> 0 Then
    MoveFilesErrorInfo =  "Error: " & Err.Number & " Error (Hex): " & Hex(Err.Number)  & Err.Source & " Description: "  & Err.Description
    Err.Clear
End If
4

2 に答える 2

0

VBScriptは、ファイルを使用した移動/削除操作ではあまり信頼できません。代わりにDOSコマンドを使用してください。ユーザーが開いている場合でも、ファイルが削除/移動されます。

自分でフォルダを作成する必要があります。これはマイナスです。ただし、動作は保証されており、エラーメッセージは表示されません。

コードは次のようになります。

Set wshShell = CreateObject( "WScript.Shell" )
wshShell.Run "cmd /c mkdir " & strNewDestination & "\" & strFolder, 0, True 
wshShell.Run "cmd /c copy /y " & strFolder & "\*.* " & strNewDestination & "\" & strFolder, 0, True
wshShell.Run "cmd /c del /y " & strFolder & "\*.*", 0, True
于 2013-04-29T17:38:32.497 に答える
0

Vbscriptはファイル操作で非常に遅く、ファイルが開いているかどうかを確認する信頼できる方法があれば、プロセスはさらに遅くなります。スクリプトサンプルの場合と同様に、「エラー時に次に再開」を使用して、開いているファイルを無視することができます。

確認したい理由は1つだけです。それは、systernalsのpsfile.exeなどのユーティリティを使用してファイルを強制的に閉じることですが、ユーザーはそれに満足していないと思います。

外部プログラムとして、psfileをスクリプトから実行して、開いているファイルを確認し、必要に応じて閉じることができるため、最初に/ cパラメーターを指定してhandledフォルダーで実行し(強制終了)、次にスクリプトのバッチから移動します。

于 2013-04-29T17:58:10.850 に答える