45

There are similar questions for Linux and Mac, but I'm after a Windows solution here.

The problem is as follows: I want to write several (js) script files in a folder, and have a program monitor that folder for file changes and new files being added, and run a command whenever that happens (to compile them all into one single file).

The solution has to:

  1. Monitor both file changes and new files being added, in a folder.
  2. Run a command only if there is any change.

It would be best if it either is a built-in solution (like a JScript or VBscript snippet), or something that does not require installation.

10 Answers10

14

I've had good success with an old program called Log Monitor. It's ancient, and long ago abandoned. But it serves the purpose pretty well.

http://www.freeware-guide.com/download/index2.html

Bob
  • 341
9

I have created a simple utility for this purpose: https://github.com/benblamey/when_changed

usage: when_changed (file path) (command) (optional-parameters)

e.g. when_changed C:\somedir\foo.txt myapp.exe bar wibble 123

Ben
  • 201
  • 2
  • 4
5

I'm currently trying this app, which requires .NET, but looks like it does the job.

4

There's a program called Belvedere that might do the trick.

http://ca.lifehacker.com/341950/belvedere-automates-your-self+cleaning-pc

It's a stand alone Windows app that runs in the background.

I've set it up to monitor my downloads folder for files with certain extensions with last modified dates of a day old. The files it finds, it deletes, however you could have it run an action instead.

dangowans
  • 2,010
4

Yet another tool: https://github.com/yankee42/java-file-change-watcher

Advantages: Platform independent (Java), small (10KB).

Disclaimer: I am the author

yankee
  • 693
3

If you want to do a built-in solution using JScript or VBScript, then what you want to look for is file system monitoring using WMI event subscriptions. Basically you write the code to monitor a folder and preform actions when a change is detected such as:

  • __InstanceCreationEvent
  • __InstanceDeletionEvent
  • __InstanceModificationEvent

...and your script runs on an interval watching for these events to occur. There are many resources, but here are some for VBScript and Powershell:

Steve Folly
  • 7,403
2

This is such a common requirement that I'm surprised there's no convenient utility built into the OS itself.

Anyway as mentioned earlier I've used LogMonitor successfully in the past. However I found this blog post informative and am using Watch 4 Folder now.

Hopefully this helps you out.

Vijay
  • 1,130
2

NirSoft has software for monitor files changes on Windows
FolderChangesView

FolderChangesView is a simple tool that monitors the folder or disk drive that you choose and lists every filename that is being modified, created, or deleted while the folder is being monitored. You can use FolderChangesView with any local disk drive or with a remote network share, as long as you have read permission to the selected folder.

enter image description here

you can download it for free from here
More Info

AminM
  • 520
0

You can use http://jnotify.sourceforge.net/ which subscribes to os-specific filesystem monitoring events. The code is years old but still works (at least on the Windows Server 2013r2 I was testing it yesterday).

There is also github resurrection of jnotify project on https://github.com/redbooth/jnotify which does not offer standalone demo app but (according to commit logs) patches some bugs.

In java7 there should be some kind of inotify-like filesystem watch too, but I was not testing it yet.

andrej
  • 452
0

If you are fine with polling for changes then https://github.com/radovskyb/watcher is another option. It's a Go package but it also provides a command line interface.

  1. Install Go (e.g. choco install golang or follow https://golang.org/dl/).
  2. Ensure go is in your PATH by running go version. The installation from step 1 should add %UserProfile%/go/bin to PATH.
  3. Run go get -u github.com/radovskyb/watcher/... as instructed in the readme.
  4. Run watcher -cmd="your_command" inside the desired directory (e.g. watcher -cmd="npm run build" javascript/*).

This should also work on non-Windows platforms, it's simple polling after all.

This shouldn't require Go to run because all binaries from %UserProfile%/go/bin are statically linked. So you can then move the couple of executables somewhere else and remove Go.

mik13ST
  • 53