根据文件到达文件夹的条件运行批处理文件

时间:2013-04-23 10:03:33

标签: batch-file

我正在自动化我的一个工作,我打算在文件夹到达文件夹后立即压缩文件夹。

Win zip脚本已写入批处理文件

您可以通过Windows批处理文件或其他任何方式来帮助它吗?

谢谢, SID

3 个答案:

答案 0 :(得分:1)

您可以使用Batch执行此操作但是您必须整天打开CMD窗口以监视“X”文件夹中的文件更改,或者您可以添加计划的重复任务以每1分钟启动一次批处理文件对于文件夹中的新文件...但是这是相同的。你可以这样做,但批处理不是这样做的好方法。

考虑使用这个名为目录监视器的应用程序,它是免费的,可以满足您的需求:

http://www.brutaldev.com/page/Directory-Monitor

enter image description here

您也可以下载便携版。

这是步骤:

1-下载/安装应用程序

2-打开它并单击“目录”以添加要监视的文件夹,并选择要监视的文件更改(在本例中为newfiles)。

3-在同一个窗口中,您可以看到一个“执行”文本框,您可以在其中加载带有一些参数的winzip,或者您可以启动批处理脚本来压缩这样的文件:

<强> Execute.bat

@Echo OFF
For /R "C:\MyNewfiles" %%# in ("*") Do (
    If /I "%%~x#" NEQU ".zip" (
        YourWinZIP Command to compress "%%a"
    )
)
Exit

4-如果要使用用户会话加载应用程序,请配置应用程序的设置。

我希望这会有所帮助。

答案 1 :(得分:1)

这是使用vbscript执行此操作的方法。将以下内容复制到文本文件中,并将其重命名为Folderwatcher.vbs

    'FolderWatcher.vbs

    Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & _
    strComputer & "\root\cimv2")

    Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
    ("SELECT * FROM __InstanceCreationEvent " _
    & "WITHIN 1 WHERE " _
    & "TargetInstance ISA 'CIM_DataFile' and " _
    & "TargetInstance.Drive='C:' and " _
    & "TargetInstance.Path='\\scripts\\'")

    Do
        Set objEvent = colMonitoredEvents.NextEvent
        Wscript.Echo objEvent.TargetInstance.FileName & "." & _
        objEvent.TargetInstance.Extension & " Created"
        wscript.sleep (10000) 'wait 10 seconds
        'Run your Unzip code here
        wscript.echo "Unzipping file now"
    Loop

将TargetInstance.Drive和Path更改为接收文件的目录。如果文件较大,则可以增加wscript.sleep。它是每秒1000。此外,如果您使用Wscript运行它,它将弹出窗口以创建和解压缩事件。如果您不想这样,请使用'注释掉这些行',或者只使用

在cmd窗口中运行它
Cscript //nologo folderwatcher.vbs

您的cmd提示符位于folderwatcher.vbs的位置。正在运行的cmd窗口中的Ctrl_C将停止脚本。

答案 2 :(得分:1)

在不知道文件及其如何应用于这种情况的情况下,您可以使用此bat文件来监视集合中的最后一个文件,当它到达时它会将它们压缩。

如果正在复制文件或FTP,那么您需要像显示的ping命令一样添加延迟,以便在继续ZIP过程之前完成last_file.exe。

@echo off
:loop
if exist "last_file.exe" goto :zip
ping -n 15 localhost >nul
goto :loop
:zip
rem 60 second delay
ping -n 60 localhost >nul
rem your script goes here.