Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File vbscript:不断检查文件是否存在并显示生存期_File_Vbscript - Fatal编程技术网

File vbscript:不断检查文件是否存在并显示生存期

File vbscript:不断检查文件是否存在并显示生存期,file,vbscript,File,Vbscript,关于我的代码,我有一个非常具体的问题 所以我得到了一个文件夹。在此文件夹中可以有>=0个文件。 我的第一个脚本在后台运行,检查文件计数是否大于0。 一旦>0,它就会激活第二个脚本,该脚本的路径+文件名为 如果从文件夹中删除文件,则会显示文件的生存期 一切正常,但有一个问题: 如果文件夹中同时有多个文件,则只“观察”顶部的文件(文件名,升序)。因此,如果第一个被删除,它肯定会观察到第二个,但是生命周期是错误的,因为它直到第一个被删除才开始 以下是我的两个代码: 脚本1.vbs: Set fso =

关于我的代码,我有一个非常具体的问题

所以我得到了一个文件夹。在此文件夹中可以有>=0个文件。 我的第一个脚本在后台运行,检查文件计数是否大于0。 一旦>0,它就会激活第二个脚本,该脚本的路径+文件名为 如果从文件夹中删除文件,则会显示文件的生存期

一切正常,但有一个问题: 如果文件夹中同时有多个文件,则只“观察”顶部的文件(文件名,升序)。因此,如果第一个被删除,它肯定会观察到第二个,但是生命周期是错误的,因为它直到第一个被删除才开始

以下是我的两个代码:

脚本1.vbs:

Set fso =CreateObject("Scripting.FileSystemObject")
If WScript.Arguments.Count = 1 Then
    pfadTiff0 = CStr(WScript.Arguments(0))
Else
    msgbox "Bitte Argumente (Pfade) angeben"
    WScript.Quit
End If

While True
    Set ordnerTiff0 = fso.GetFolder(pfadTiff0)
    Set filesTiff0 = ordnerTiff0.Files
    anzFilesTiff0 = ordnerTiff0.Files.Count
    If anzFilesTiff0 > 0 Then
        For Each objFile in filesTiff0  
            CreateObject("WScript.Shell").Run "QueueTimeUP.vbs " & objFile.Name & " " & pfadTiff0, 0, True                                      
        Next
    End If
    WScript.Sleep 2000
WEnd
脚本2.vbs:

filename = CStr(WScript.Arguments(0))
pfad = CStr(WScript.Arguments(1))
Set fso = CreateObject("Scripting.FileSystemObject")

startZeit = Timer()
komplett = pfad&"\"&filename

While fso.FileExists(komplett) = True
    WScript.Sleep 100
WEnd

endZeit = Timer()
differenz = endZeit-startZeit
msgbox "Existenz von Job " & filename & " in Sekunden: " & differenz
本声明:

CreateObject("WScript.Shell").Run "QueueTimeUP.vbs " & objFile.Name & " " & pfadTiff0, 0, True
使用
True
值作为最后一个参数。指定在返回之前要等待脚本完成(同步)。因此,主脚本将处于等待状态,直到第二个脚本(
QueueTimeUp.vbs
)退出,直到删除第一个文件后才会发生这种情况

您应该能够使用
False
作为最后一个参数,而不必等待第二个脚本完成。然后删除
While True
循环,只允许主脚本完成

' Main script. Remove "While True" loop.
Set ordnerTiff0 = fso.GetFolder(pfadTiff0)
Set filesTiff0 = ordnerTiff0.Files
anzFilesTiff0 = ordnerTiff0.Files.Count
If anzFilesTiff0 > 0 Then
    For Each objFile in filesTiff0  

        ' Use False for last param to specify asynchronous call...
        CreateObject("WScript.Shell").Run "QueueTimeUP.vbs " & objFile.Name & " " & pfadTiff0, 0, False

    Next
End If

' Allow script to complete.
现在,您将为文件夹中的每个文件运行一个
QueueTimeUp.vbs
脚本


仅供参考:如果您熟悉通过VBScript编写WMI脚本,它提供了
\uuuu InstanceCreationEvent
\uuuu InstanceDeleteEvent
类,可分别在创建或删除文件时通知脚本。这样,您就不必每隔几秒钟轮询一个文件夹以查找更改。

我相信对于每个文件,它都会加载vbs2,但在vbs2结束之前不会开始下一次执行。如果我使用下面的代码,它将不会迭代,直到cmd实例结束

For Each objFile in colFiles
     oShell.run "cmd /k CD C:\Program File" ,1 , true
Next
我认为您应该在第一个vbs中有一个启动计时器,然后通过管道将其连接到第二个vbs2。这意味着在程序开始执行时只调用一次启动时间

startZeit = Timer() 

For Each objFile in filesTiff0 
     CreateObject("WScript.Shell").Run "QueueTimeUP.vbs " & objFile.Name & " " & pfadTiff0 & " " & startZeit , 0, True                                      
Next
vbs 2


希望这有帮助

谢谢你们的帮助

@绑定:删除while-true循环是没有选项的,因为不允许程序停止运行。即使此时没有文件,以后也总会有新文件需要观察。但是您对Run语句的“false”参数的提示非常棒

@1991年: 好主意,这实际上是我在这里提问之前的第一个想法

我用另一种解决办法自己解决了。也许这对任何人都有帮助:

Set fso =CreateObject("Scripting.FileSystemObject") 
If WScript.Arguments.Count = 1 Then
    pfadTiff0 = CStr(WScript.Arguments(0))
Else
    msgbox "Bitte Argumente (Pfade) angeben"
    WScript.Quit
End If

Set ordnerTiff0 = fso.GetFolder(pfadTiff0
Set filesTiff0 = ordnerTiff0.Files

letztesFile = "000a"    // PART OF SOLUTION, IT´S "LAST FILE"

While True
    For Each objFile in filesTiff0
        If objFile.Name > letztesFile Then   // PART OF SOLUTION
            CreateObject("WScript.Shell").Run "QueueTimeUP.vbs " & objFile.Name & " " & pfadTiff0, 0, False  // thanks Bond for "false"
            letztesFile = objFile.Name      // PART OF SOLUTION
        End If      
    Next                                        
    WScript.Sleep 500
WEnd
Set fso =CreateObject("Scripting.FileSystemObject") 
If WScript.Arguments.Count = 1 Then
    pfadTiff0 = CStr(WScript.Arguments(0))
Else
    msgbox "Bitte Argumente (Pfade) angeben"
    WScript.Quit
End If

Set ordnerTiff0 = fso.GetFolder(pfadTiff0
Set filesTiff0 = ordnerTiff0.Files

letztesFile = "000a"    // PART OF SOLUTION, IT´S "LAST FILE"

While True
    For Each objFile in filesTiff0
        If objFile.Name > letztesFile Then   // PART OF SOLUTION
            CreateObject("WScript.Shell").Run "QueueTimeUP.vbs " & objFile.Name & " " & pfadTiff0, 0, False  // thanks Bond for "false"
            letztesFile = objFile.Name      // PART OF SOLUTION
        End If      
    Next                                        
    WScript.Sleep 500
WEnd