Comment surveiller les modifications d'un dossier et exécuter une commande si c'est le cas, sous Windows?


32

Il y a des questions similaires pour Linux et Mac , mais je recherche une solution Windows ici.

Le problème est le suivant: je veux écrire plusieurs fichiers de script (js) dans un dossier, et avoir un programme surveiller ce dossier pour les modifications de fichiers et les nouveaux fichiers ajoutés, et exécuter une commande chaque fois que cela se produit (pour les compiler tous en un seul) un seul fichier).

La solution doit:

  1. Surveillez les modifications de fichiers et les nouveaux fichiers ajoutés, dans un dossier.
  2. Exécutez une commande uniquement en cas de modification.

Il serait préférable que ce soit une solution intégrée (comme un extrait JScript ou VBscript), ou quelque chose qui ne nécessite pas d'installation.


voir ce blog pour quelques applications pour windows.
Vijay

Réponses:


3

Il existe un programme appelé Belvedere qui pourrait faire l'affaire.

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

Il s'agit d'une application Windows autonome qui s'exécute en arrière-plan.

Je l'ai configuré pour surveiller mon dossier de téléchargements pour les fichiers avec certaines extensions avec les dernières dates modifiées d'un jour. Les fichiers qu'il trouve, il les supprime, mais vous pourriez lui faire exécuter une action à la place.


Wow - celui-là a l'air super sympa. Je vais choisir cela comme réponse (même si j'ai déjà obtenu ce dont j'avais besoin d'un autre) car il est probablement beaucoup plus utile et polyvalent que celui que j'utilise, pour d'autres personnes (et peut-être moi à l'avenir!) . +1 et accepté!
Camilo Martin

2
Belvedere m'a fait perdre des heures pour finalement comprendre qu'il est plein de bugs non résolus , en particulier avec des commandes personnalisées. Essayez plutôt FolderMonitor (et utilisez-le "{0}{1}"dans le champ des paramètres, y compris les guillemets). Seul problème: vous ne pouvez pas définir une commande distincte pour chaque dossier. Un seul, à l'échelle mondiale.
fregante

@ bfred.it Belvedere a ses problèmes, mais cela a fonctionné pour moi. FolderMonitor semble également être une bonne solution. Je pense qu'il est celui que l'utilisateur pose la question a fini avec .
dangowans


7

J'ai créé un utilitaire simple à cet effet: https://github.com/benblamey/when_changed

utilisation: lorsque_changé (chemin du fichier) (commande) (paramètres facultatifs)

par exemple when_changed C: \ somedir \ foo.txt myapp.exe barre wibble 123


J'aime la façon dont c'est une API élégante. Prend-il en charge les dossiers de manière récursive?
Camilo Martin

Oui: when_changed C: \ **. Txt foo.exe Je voulais une version sans dépôt de github.com/joh/when-changed pour Windows.
Ben

6

Avec les dossiers de surveillance .NET, cela est vraiment facile à coder. Je suis sûr que quelqu'un a fait un tel programme.

Je viens de trouver ce joyau pour vous http://www.guidingtech.com/9861/automate-folder-actions-windows-watch-4-folder/


Je sais à quel point il est facile de coder cela dans .NET - je ne voulais tout simplement pas. Mais j'essaye celui-ci qui est gratuit, ça peut aussi marcher! +1 pour la recommandation, celle-là aussi semble sympa.
Camilo Martin


2

Il s'agit d'une exigence si courante que je suis surpris qu'aucun utilitaire pratique ne soit intégré au système d'exploitation lui-même.

Quoi qu'il en soit, comme mentionné précédemment, j'ai utilisé LogMonitor avec succès dans le passé. Cependant, j'ai trouvé ce billet de blog informatif et j'utilise Watch 4 Folder maintenant.

J'espère que ceci vous aidera.


+1, mais je ne dirais pas que c'est une "exigence commune" pour quiconque, sauf nous, les développeurs ... Et d'ailleurs, il y a des appels système pour surveiller le système de fichiers, donc cela compte comme "intégration du système d'exploitation", je suppose.
Camilo Martin

1
Eh bien, je le voyais du point de vue des entreprises et du partage de réseau. Vous voulez toujours savoir qui blâmer lorsqu'un fichier est manquant: P. Je suis en train de diagnostiquer une telle situation en ce moment: /
Vijay


2

Si vous souhaitez créer une solution intégrée à l'aide de JScript ou VBScript, vous devez rechercher la surveillance du système de fichiers à l'aide des abonnements aux événements WMI. Fondamentalement, vous écrivez le code pour surveiller un dossier et effectuer des actions lorsqu'une modification est détectée, comme:

  • __InstanceCreationEvent
  • __InstanceDeletionEvent
  • __InstanceModificationEvent

... et votre script s'exécute sur un intervalle en attendant que ces événements se produisent. Il existe de nombreuses ressources, mais en voici quelques-unes pour VBScript et Powershell:


1

NirSoft a un logiciel pour surveiller les changements de fichiers sur Windows
FolderChangesView

FolderChangesView est un outil simple qui surveille le dossier ou le lecteur de disque que vous choisissez et répertorie chaque nom de fichier qui est modifié, créé ou supprimé pendant que le dossier est surveillé. Vous pouvez utiliser FolderChangesView avec n'importe quel lecteur de disque local ou avec un partage réseau distant, tant que vous avez l'autorisation de lecture sur le dossier sélectionné.

entrez la description de l'image ici

vous pouvez le télécharger gratuitement à partir d' ici
Plus d'infos


Semble plus un outil d'information / de débogage qu'un outil d'automatisation, mais toujours intéressant.
Camilo Martin

0

Vous pouvez utiliser http://jnotify.sourceforge.net/ qui s'abonne aux événements de surveillance du système de fichiers spécifiques au système d'exploitation. Le code a des années mais fonctionne toujours (au moins sur Windows Server 2013r2, je le testais hier).

Il y a aussi la résurrection de github du projet jnotify sur https://github.com/redbooth/jnotify qui ne propose pas d'application de démonstration autonome mais (selon les journaux de validation) corrige quelques bugs.

Dans java7, il devrait également y avoir une sorte de surveillance du système de fichiers de type inotify, mais je ne le testais pas encore.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.