Comment puis-je imprimer des fichiers texte à l'aide d'un script ?

S'il vous plaît Docteur Script...

Hey, Scripting Guy!

Bienvenue dans cette nouvelle section TechNet, dans laquelle le Docteur Script de Microsoft répond aux questions récurrentes sur les scripts d'administration système. Vous avez une question sur les scripts d'administration système ?

Question du jour : comment puis-je imprimer des fichiers texte à l'aide d'un script ?

Comment puis-je imprimer des fichiers texte à l'aide d'un script ?Comment puis-je imprimer des fichiers texte à l'aide d'un script ?

S'il vous plaît Docteur Script... J'ai plusieurs fichiers texte dans un dossier. Existe-t-il un moyen de les imprimer à l'aide d'un script ? Je sais que je peux utiliser Microsoft Word pour les imprimer depuis un script, mais ce programme n'est pas installé sur mon ordinateur.

-- MA

Bonjour MA. Ne dites à personne de chez Microsoft que nous vous avons dit ça, mais il existe un moyen d'imprimer quelques fichiers texte sans utiliser Microsoft Word. Vous pouvez, en effet, utiliser l'objet Shell, qui est intégré au système d'exploitation. Et ce qui est génial, c'est que vous pouvez imprimer vos fichiers même si l'objet Shell ne possède pas de méthode Print. Je vous jure !

En fait, l'objet Shell possède une méthode appelée InvokeVerbEx qui vous permet d'effectuer les tâches qui s'affichent lorsque vous cliquez avec le bouton droit sur un fichier dans l'Explorateur Windows. Cliquez avec le bouton droit sur l'un de vos fichiers texte et observez le menu contextuel qui s'affiche. Vous devez voir les options Ouvrir, Imprimer, Modifier, Couper, Copier, Supprimer, etc. Eh bien, l'objet Shell vous permet d'effectuer toutes ces tâches par programme. Voici un script qui imprime tous les fichiers texte du dossier C:\Logs :

TargetFolder = "C:\Logs" 
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(TargetFolder) 
Set colItems = objFolder.Items
For Each objItem in colItems
    objItem.InvokeVerbEx("Print")
Next

Ce script se connecte simplement au dossier C:\Logs, puis en extrait les éléments. Cet ensemble de fichiers est ensuite stocké dans la variable colItems à l'aide de la ligne de code suivante :

Set colItems = objFolder.Items

Notez que nous avons pris un exemple simple dans lequel C:\Logs contient uniquement des fichiers journaux, que nous souhaitons tous imprimer. Si C:\Logs contient d'autres types de fichiers ou des fichiers que vous ne souhaitez pas imprimer, vous devrez insérer du code qui fasse la distinction entre les fichiers que vous souhaitez imprimer et ceux que vous ne souhaitez pas imprimer.

Une fois que les fichiers sont placés dans colItems, nous utilisons une boucle « For Each » pour les traiter. Pour chaque fichier du dossier, nous utilisons la méthode InvokeVerbEx à laquelle nous indiquons d'imprimer chaque fichier :

objItem.InvokeVerbEx("Print")

C'est tout. Exécutez ce script, et tous les fichiers vont s'imprimer, l'un après l'autre.

Et si nous voulions faire autre chose sur ces fichiers, par exemple, les modifier ? Aucun problème. Il suffit de remplacer le paramètre Print par le paramètre Edit :

TargetFolder = "C:\Logs" 
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(TargetFolder) 
Set colItems = objFolder.Items
For Each objItem in colItems
    objItem.InvokeVerbEx("Edit")
Next

Vous devez garder à l'esprit que lorsque vous utilisez InvokeVerbEx, votre script effectue les mêmes opérations que celles du menu contextuel de l'Explorateur Windows. Par exemple, que se passe-t-il lorsque vous cliquez avec le bouton droit sur un fichier et que vous sélectionnez Supprimer dans l'Explorateur Windows ? En effet, le fichier n'est pas automatiquement supprimé ; une boîte de dialogue vous demande si vous souhaitez réellement envoyer le fichier dans la Corbeille. C'est important, parce que cette même boîte de dialogue va s'afficher si vous passez la fonction Delete à la méthode InvokeVerbEx. Ce script ne supprime pas automatiquement les fichiers de C:\Logs, mais affiche une fenêtre de confirmation pour chacun des fichiers du dossier :

TargetFolder = "C:\Logs" 
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(TargetFolder) 
Set colItems = objFolder.Items
For Each objItem in colItems
    objItem.InvokeVerbEx("Delete")
Next

N'oubliez pas non plus que vous ne pourrez peut-être pas utiliser toutes les options proposées dans le menu contextuel. Pour savoir comment distinguer les options disponibles de celles qui ne le sont pas, consultez la section correspondante du guide Microsoft Windows 2000 Scripting Guide (en anglais).

Pour en savoir plus

Consultez les archives de S'il vous plaît Docteur Script...