Hotline pc one faq windows  
Hotline pc line
Hotline PC - contact Hotline PC - Vista Hotline PC - Windows XP Hotline PC - dossiers Hotline PC - registre Hotline PC - reseaux Hotline PC - applications Hotline PC - ms-dos Hotline PC - gravure Hotline PC - autres
Google
 
Forum
Fonds d'écran
Sonneries
Sonneries
Jeux





Quelques exemples de fichiers Batch

Sur cette page, des exemples de scripts utilisant le langage Batch.

Dernière mise à jour : 07/04/2005

Pages complémentaires : généralités sur le langage Batch.

Copier des fichiers
Spécifier un groupe de commandes
Créer un fichier texte
Nommer un fichier
Copier des fichiers en les renommant
Supprimer des fichiers
Déplacer des fichiers
Ajouter ou remplacer plusieurs fichiers
Décomposer une date
Insérer une date dans un nom de fichier
Lister les derniers fichiers modifiés
Créer un dossier
Copier des fichiers en fonction d'une date
Sauvegarder un même fichier en le datant
Changer la date de modification d'un fichier
Scripts servant à la gestion des répertoires
Récupérer l'emplacement par défaut
Supprimer un nombre déterminé de fichiers
Compter le nombre de fichiers présents
Supprimer le contenu d'un répertoire cible
Analyser les fichiers
Créer un fichier contenant un texte
Compter les lignes d'un fichier
Vérifier la présence d'une chaîne
Supprimer ou remplacer une chaîne
Retrouver une chaîne de caractères
Trouver une même occurrence
Afficher les informations d'un fichier
Modifier un texte
Afficher le contenu d'un fichier
Supprimer toutes les lignes vides
Afficher une ligne particulière d'un fichier
Afficher un certain nombre de lignes
Afficher une ligne précise
Paramétrer les sorties
Renvoyez le code d'erreur d'un fichier Batch
Retrouver la version d'Internet Explorer
Un script pour redémarrer votre ordinateur
Calculer le temps passé sur une application

Copier des fichiers de différentes extensions
Servez-vous de ce modèle de script :
for %%a in ( %1 %2 %3 %4 %5 %6 %7 %8 %9) do xcopy *.%%a c:\sauvegarde /s /y
Lancez votre fichier Batch en le faisant suivre du nom des extensions voulues.
Nous créons une boucle de contrôle qui va pour chaque paramètre passé à la suite de notre fichier Batch entamer le processus de copie vers le répertoire C:\Sauvegarde.

Spécifier un groupe de commandes dans un fichier
Créez un fichier nommé Fichier.txt dans lequel vous allez copier ce contenu :

attrib -h -s
attrib -a
attrib -r
attrib

Dans un nouveau fichier Batch nommé Test.bat copiez ce contenu :
for /f "delims=" %%a in (fichier.txt) do %%a *.%1

La commande permettant d'exécuter ces quatre opérations sur tous les fichiers *.bmp est celle-ci : test bmp
Le principe est de lire le contenu du fichier ligne par ligne et pour chaque objet trouvé par la commande "For". La variable %1 remplace le premier paramètre saisi par l'utilisateur à la suite du nom du fichier Batch.
Le mot-clé "Delims" est nécessaire sinon il n'est pas tenu compte des espaces dans le parcours des commandes inscrites dans le fichier.

Créer un fichier texte en se servant de la commande Echo
Nous nous sommes inspiré d'une suggestion faite par Jerold Schulman à partir de son site : www.jsiinc.com. Le principe est très simple : nous allons encore une fois nous servir des parenthèses. Imaginons que nous souhaitions désinstaller complètement la machine virtuelle Java, il nous suffira de supprimer certaines données de l'Explorateur Windows ainsi que du Registre Windows. Dans ce dernier cas nous allons créer un fichier .reg qui une fois enregistré permettra d'opérer les modifications nécessaires. Créez un nouveau fichier Batch en saisissant ceci :

@echo off
rd /s /q %SystemRoot%\JAVA
del /q %systemroot%\inf\java.pnf
del /q %systemroot%\system32\jview.exe
del /q %systemroot%\system32\wjview.exe
(
@echo Windows Registry Editor Version 5.00
@echo/
@echo [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Java VM]
@echo/
@echo [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\AdvancedOptions\JAVA_VM]
@echo/
) >"%Temp%\Java.reg"
regedit /s "%Temp%\Java.reg"
del /q "%Temp%\Java.reg"

Dans un premier temps, nous supprimons le répertoire Java placé dans \Windows. À partir de ce même emplacement nous effaçons les fichiers Java.pnf, Jview.exe et Wjview.exe.
Il nous reste plus qu'à supprimez ces deux clés du Registre :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Java VM et HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\AdvancedOptions\JAVA_VM
Il suffit dans ce cas d'ajouter le préfixe - au début du nom de la clé. Pour ce faire nous allons utiliser la commande Echo en créant un fichier de commande temporaire placée entre deux parenthèses. De cette façon, c'est l'ensemble des lignes commençant par @echo qui seront redirigées vers un seul et même fichier .reg. Il nous reste plus qu'à l'enregistrer dans le répertoire Temp sous le nom de Java.reg.
La commande regedit /s nous permet en suite de fusionner les informations contenues dans ce fichier au Registre Windows.
Pour terminer il nous reste plus qu'à supprimer le fichier Java.reg.

Nommer un fichier de manière incrémentielle
Dans un nouveau fichier Batch copiez ce contenu
:
@echo off
set nombre=
:Boucle
if not exist Document%nombre%.txt goto Copie
set /a nombre+=1
goto Boucle
:Copie
copy Document.txt Document%nombre%.txt

Nous nous proposons dans ce Batch de renommer automatiquement un fichier nommé Document.txt en le numérotant à chaque fois.
Nous créons une structure de boucle avec un "compteur" qui n'est pas encore initialisé. Nous assignons au compteur un nom de variable nommée %nombre%.
Le script démarre ensuite les commandes contenues dans l'étiquette :Boucle.
Si un fichier portant ce nom existe déjà nous incrémentons la variable %nombre% d'un pas de 1 et nous retournons au début de notre boucle.
Sinon nous exécutons les commandes spécifiées sous l'étiquette :Copie : le fichier précédent est copié puis renommé en ajoutant à son nom la variable %nombre%.

Copier les fichiers en les renommant par incrémentation
C'est un prolongement du script précédent... Dans un nouveau fichier Batch copiez ce contenu :

set compteur=0
set rep1= c:\source
set rep2= c:\destination
for /f "tokens=1-2 delims=." %%a in ('dir /b %Rep1%') do (
call Copie "%%a" "%%b"
)

Dans un nouveau fichier Batch (dans notre exemple, nommé Copie.bat) copiez ce contenu :

set nom=%~1
set extension=%~2
set /a compteur+=1
set fichier=%nom%%compteur%.%extension%
copy %rep1%\"%nom%.%extension%" %rep2%\"%fichier%"

Le script va renommer automatiquement chaque fichier copié en leur attribuant un numéro de traitement.
Nous définissons une variable et deux répertoires.
La troisième ligne permet de supprimer le . entre le nom du fichier et son extension ("delims=.") et de décomposer le résultat en deux blocs distincts ("tokens=1-2").
Pour chaque objet trouvé dans le répertoire "source" nous appelons l'autre fichier Batch.
Au nom et à l'extension. du fichier sont attribuées respectivement deux variables nommées %nom% et %extension%.
La variable %compteur% est incrémenté d'un pas de 1.
Une variable nommée %fichier% est créée en ajoutant à la suite de la variable %nom% la valeur de %compteur%.
Nous copions le fichier correctement renommé dans le répertoire de destination.
Les guillemets permettent de copier également les noms de fichiers comportant des espaces.
Une autre méthode permettant de renommer des fichiers
Nous nous inspirons d'une solution proposée par Timo Salmi à partir de cette page Web : www.uwasa.fi/~ts/http/http2.html#batch. Dans un nouveau fichier Batch copiez ce contenu :

@echo off
set compteur=1
for /f %%a in ('dir c:\scripts\*.txt /b /s /-c /a:-d-s-h') do (
call :menu %%a)
set compteur=
goto :eof
:menu
set fichier=%~d1& set chemin=%~p1& set nom=%~n1& set extension=%~x1
ren %fichier%%chemin%%nom%%extension% %nom%.%compteur%%extension%
set /a compteur+=1
goto :eof

Nous initialisons la variable %compteur% sur 1. Nous effectuons un balayage de la sortie de la commande "Dir" en appelant pour chaque ligne trouvée les commandes placées sous l'étiquette :menu. Chaque fichier sera décomposé entre son nom et son extension. Puis il sera renommé en accolant la valeur de la variable %compteur%. Cette dernière sera à chaque fois incrémentée d'un pas de un.

Supprimer tous les fichiers dans tous les répertoires spécifiés
Dans cet exemple nous allons supprimer tous les fichiers contenus dans tous les répertoires nommés Temp.

@echo off
for /f "delims=" %%a in ('dir c:\ /b /ad /s ^| findstr /i \%1') do echo del "%%a\*.*"

Saisissez le nom du fichier Batch suivi du nom du répertoire à "vider".
La commande findstr /i \Temp nous permet de retrouver toutes les arborescences contenant la chaîne de caractères "Temp" et qui seront affichées par "Dir".
Vous devez préfixer le symbole de redirection | du signe ^ puisque qu'il fait partie des caractères réservés.
Enfin, nous allons supprimer tous les fichiers présents dans chacune des arborescences trouvées.

Une manière de supprimer des fichiers différents
Dans un nouveau fichier Batch (nommé Test) copiez ce contenu :

@echo off
:Boucle
del *.%1
shift
if not "%1" == "" goto Boucle

Il vous suffire alors de saisir ce type de commande : test txt doc exe
le script démarre en supprimant les fichiers portant l'extension du premier paramètre saisi par l'utilisateur à la suite du nom du fichier Batch.
La commande "Shift" permet de décaler la variable %1 ce qui permet de traiter le second paramètre (doc).
Si une nouvelle variable est trouvée (si %1 n'est pas égale à "") alors nous reprenons le script à partir de l'étiquette :Boucle.

Une manière de déplacer des fichiers différents
Dans un nouveau fichier Batch (nommé Test) copiez ce contenu :
for %%a in (%1 %2 %3 %4 %5 %6 %7 %8 %9) do move "%%a" c:\destination
Il vous suffire alors de saisir ce type de commande : test *.txt *.doc *.exe
Là encore, le principe est très similaire à ce qui était expliqué auparavant sauf sue nous n'opérons pas de décalage de variable en nous servant de la commande "Shift".
Cela revient à saisir directement cette commande :
for %a in (*.txt *.doc *.exe) do move "%a" c:\destination
Il est préférable de placer entre guillemets la seconde variable %a si les noms des fichiers traités comportent des espaces.

Ajouter ou remplacer un ou plusieurs fichiers
Dans un nouveau fichier Batch (nommé test) copiez ce contenu :

replace %1\*.* %2 /a
replace %1\*.* %2 /u

Saisissez, par exemple, cette commande : batch c:\source c:\destination
Opérez des modifications dans les fichiers placés dans le répertoire source puis à nouveau lancez la même commande en appuyant sur la touche F3. Il vous est possible de synchroniser les deux répertoires en remplaçant le contenu du fichier Batch par ceci :

replace %1\*.* %2 /a
replace %1\*.* %2 /u
replace %2\*.* %1 /a
replace %2\*.* %1 /u

Décomposer la date d'aujourd'hui
Voici une méthode assez simple. Dans un nouveau fichier Batch copiez ce contenu :

for /f "tokens=1-3 delims=/" %%f in ("%date%") do (
set datation=%%f%%g%%h
set jour=%%f
set mois=%%g
set année=%%h)
echo %datation%
echo J=%jour% M=%mois% A=%année%

Dans ce cas, nous procédons à l'analyse de la variable %date% tel qu'elle apparaît en saisissant ceci : echo %date%
En nous servant du mot clé "delims=/" nous supprimons les barres tranversales.
Le mot-clé "tokens" nous permet de passer les trois blocs de données en trois variables nommées %f, %g et %h.
Le reste du script n'est qu'un jeu sur les variables : nous considérons qu'il est plus rapide de se servir d'une variable composée d'une seule lettre que d'un mot.
Une autre solution consiste à extraire directement les informations utiles à partir de la variable prise textuellement :

set jour=%date:~0,2%
set mois=%date:~3,2%
set année=%date:~5,4%
@echo Nous sommes le %jour%/%mois%/%année%

Insérer une date dans un nom de fichier
Ceci peut en être un exemple :
echo sauvegarde_%date:~0,2%%date:~3,2%%date:~6,4%.txt
Nous pouvons imaginer toute sorte de "formatage" de la variable %date%...

Lister les fichiers correspondant à une date de modification
Nous inspirons d'un exemple de script proposé par Timo Salmi à partir de son site web : www.uwasa.fi/~ts/http/http2.html#batch. Dans un nouveau fichier Batch copiez ce contenu :

@echo off
set dossier=%1
set année=%2
set dossier1=dir /b /s %dossier%
set année1=findstr /l /c:"%année%"
for /f "tokens=*" %%c in ('%dossier1%') do (
set fichier=%%c
call :commande
)
goto :eof
:commande
for /f %%c in ('dir "%fichier%" ^|%année1%') do @echo %fichier%

La syntaxe permettant de lancer ce Batch est celle-ci : Nom_Batch Répertoire Année. Par exemple : test c:\source 2004
Nous définissons quatre variables :
%1 : le premier paramètre saisi par l'utilisateur qui sera le nom du répertoire.
%2 : le second paramètre saisi par l'utilisateur qui sera l'année de modification.
%dossier1% : le résultat de la commande "Dir" qui trie les fichiers en fonction de leur date de modification.
%année1% : le résultat d'une recherche portant sur l'expression "2004" si l'année spécifiée est 2004.
Pour chaque ligne trouvée dans la sortie de la commande "Dir" il est alors demandé de :
Définir une variable nommée %c
D'appeler les instructions spécifiées sous l'étiquette :commande.
Chaque ligne contenant l'expression définie par la variable %année% sera affichée en utilisant la commande "Echo".

Lister tous les fichiers modifiés aujourd'hui
Saisissez cette commande :
dir *.* /o:n | find "%date%" | more

Créer un dossier portant le nom de la date d'aujourd'hui
Dans un nouveau fichier Batch copiez ce contenu :

@echo off
for /f "tokens=1-3 delims=/" %%a in ('date /t') do set dossier=c:\sauvegarde\%%a%%b%%c
md %dossier%
copy c:\test\*.txt %dossier%

Nous nous proposons dans cet exemple de copier tous les fichiers Texte placés dans C:\Test dans un répertoire que nous allons créer et qui portera le nom de la date d'aujourd'hui. Le principe est assez simple :
Nous nous servons de la commande "For" pour extraire trois variables "tokens=1-3" de la commande "date /t".
Une fois ces trois variables extraites nous créons une variable nommé %dossier% et qui correspond à un répertoire virtuel placé dans C:\Sauvegarde.
Le nom de ce répertoire est la date du jour. Afin d'éviter un message d'erreur nous nous servons du paramètre "delims=/" afin de soustraire du nom les barres transversales.
Nous créons (Md) un répertoire portant le nom de la variable créée (%Dossier%).
Pour mieux comprendre le mécanisme de ce script saisissez ces commandes :
for /f "tokens=1-3 delims=/" %a in ('date /t') do set Dossier=c:\Sauvegarde\%a%b%c
À la suite du prompt sera affiché la date du jour...
md %dossier%
Vous pouvez tester ce script an accédant aux propriétés de "Date et heure" et en changeant momentanément la date du jour. Le même script peut être utilisé pour réaliser des sauvegardes des fichiers en les rangeant pas heure. Il suffit de modifier la première ligne en inscrivant :
for /f "tokens=1-2 delims=:" %%a in ('time /t') do set Dossier=C:\Sauvegarde\%%a%%b
md %dossier%

Copier des fichiers en fonction de la date d'aujourd'hui
Servez vous de ce modèle de script :

for /f "tokens=1-3 delims=/ " %%a in ('date/t') do set MMDDYY=%%b-%%a-%%c
xcopy c:\source\*.* c:\destination /D:%MMDDYY%

Il y a un piège : la commande "Xcopy" exige avec le commutateur /d que le mois soit spécifié avant l'indication du jour.
Pour le reste, nous extrayons de la commande "Date /t" trois variables (mois, jour, année) qui nous servira à spécifier à partir de quelle date de dernière modification les fichiers seront inclus dans le processus de copie.

Copier différentes sauvegardes d'un même fichier en les datant
Nous nous inspirons dans cet exemple d'une suggestion faite par Jerold Schulman à partir de son site Web : www.jsiinc.com. Dans un nouveau fichier Batch copiez ce contenu :

setlocal
for /f %%a in ('dir /b/x c:\source') do call :début %%a
endlocal
goto:eof
:début
set Nom1=%1
for /f "tokens=1,2,3 delims= /" %%a in ('date /t') do set Date1=%%a%%b%%c
for /f "tokens=1,2 delims=: " %%d in ('time/t') do set Heure1=%%d%%e
for %%f in (%Nom1%) do (
set Nom2=%%~nf
set Extension=%%~xf
)
set Nom3=%Nom2%-%Date1%-%Heure1%%Extension%
copy c:\source\%Nom1% c:\destination\%Nom3%

Dans ce cas, le principe est de créer des sauvegardes des fichiers placés dans le répertoire Source dont les différentes versions seront datées puis classées dans un répertoire nommé Destination. Signalons tout de suite que ce script ne fonctionne pas si le fichier contient des espaces ou des caractères réservés.
Les lignes 1 et 3 nous permettent de réinitialiser à chaque exécution du script les variables %nom1%, %nom2% et %extension%.
Une fois cette précaution prise, la commande goto:eof nous permet de sortir du fichier de script.
Le script proprement démarre en ligne n°2. Pour chaque ligne affichée par la commande "Dir" nous allons exécutez les commandes placées sous l'étiquette :début.
Une variable nommée %Nom1% nous permet de récupérer le nom du fichier affiché par "Dir".
Nous décomposons le nom complet du fichier en son nom (%%~nf) puis son extension (%%~xf).
Par ailleurs, nous procédons à l'extraction des commandes "Date /t" et "Time /t" des valeurs qu'elles contiennent.
Enfin, nous créons une nouvelle variable nommée %Nom3% qui est la concaténation des variables obtenues précédemment.
Ne reste plus qu'à enclencher le processus de copie puis recommencer le même processus pour le nom de fichier suivant.

Changer la date de modification d'un fichier sans le modifier
Ce type de commande le fait :
copy /b /y "fichier.txt" +
Cela revient à ajouter au fichier que nous copions un fichier inexistant. Aucune modification n'est alors apportée au fichier original. En l'absence du signe + il serait indiqué qu'il n'est pas possible de copier un fichier sur lui-même.

Créer des scripts pour la gestion des répertoires
Nous allons écrire un script qui cherche si un répertoire portant le nom indiqué existe bien sur un des lecteurs spécifiés. Dans un nouveau fichier Batch saisissez ce contenu :

@echo off
set Liste=C,D,E et F
for %%a in (%Liste%) do for /f "delims=" %%b in ('dir /s /b /ad "%%a:\" 2^>NUL ^| findstr /i "\%~1$"') do (
set dossier=%%b
goto :Sortie
)
echo %1 introuvable dans %Liste%
goto :eof
:Sortie
echo %dossier%

Il suffit de saisir le nom du script suivi du nom du répertoire recherché. Nous définissons une variable nommé %liste% qui contient les noms des lecteurs. Aussi étonnant que cela puisse paraître la syntaxe n'a strictement aucune importance. Seul compte l'indication des lettres de lecteur.
Suivent deux commandes "For" imbriquées l'une dans l'autre. Afin de mieux comprendre le fonctionnement de la seconde, saisissez ceci en Invite de commandes :
dir /s /b /ad "c:\" 2>nul | findstr /i "\destination"
Nous recherchons dans la sortie de la commande "Dir" une occurrence qui sera "\destination".
En toute logique, si un répertoire nommé Destination est trouvé il sera repéré par la barre transversale qui le précède.
La redirection 2>nul permet d'éviter l'affichage d'éventuels messages d'erreur.
Rappelons que l'emploi de l'accent circonflexe est nécessaire pour préfixer les symboles de redirection > et | à partir du moment qu'ils sont utilisés dans un fichier de script.
La variable %\~1$ permet de récupérer le chemin absolu qui mène au répertoire.
La première ligne trouvée (%b) est passée en tant que variable et elle sera nommée %dossier%.
Il ne reste plus qu'à se rendre à l'étiquette :Sortie et à afficher la variable obtenue.

Récupérer l'emplacement par défaut
Afin de récupérer le chemin du répertoire courant inspirez-vous de ce Batch :

@echo off
for /f "tokens=*" %%a in ('cd') do set chemin=%%a
echo %chemin%

Nous nous servons simplement de la commande "Cd" pour extraire le chemin du prompt. Oui, cela peut paraître quelque peu curieux mais ça fonctionne !

Supprimer un nombre déterminé de fichiers dans un répertoire donné
Dans un nouveau fichier Batch nommé Test copiez ce contenu :

set répertoire=%1%
set fichier=%2%
set nombre=%3%
for /f "skip=%nombre%" %%a in ('dir /a:-d /b "%répertoire%\%fichier%"') do del %répertoire%\%%a

En admettant que vous souhaitiez "écrémer" les 5 premiers fichiers .txt dans un répertoire Source, saisissez cette commande :
test c:\source *.txt 5
Nous définissons trois variables correspondant aux trois paramètres saisis par l'utilisateur.
Dans la sortie écran affichée par la commande "Dir" nous "squizzons" les cinq premières lignes affichées correspondant aux cinq fichiers les plus anciens en bous servant du mot clé "skip=%nombre%".
Il vous est aussi possible d'effectuer l'opération inverse en changeant l'ordre de tri :
dir /a:-d /o:-d /b
La variable %a sera chaque nom de fichier retenu que nous reprenons pour les supprimer un à un.

Compter le nombre d'objets présents dans un répertoire
Dans un nouveau fichier Batch, copiez ce contenu :

@echo off
set répertoire=%1
set /a compteurA=0
set /a compteurB=0
for /f %%a in ('dir /s /b /a:-d %répertoire%\*.*') do set /a CompteurA+=1
for /f %%a in ('dir /s /b /a:d %répertoire%\*.*') do set /a CompteurB+=1
echo %CompteurA% fichiers %compteurB% dossiers

Saisissez le nom du script suivi du nom du répertoire à explorer.
Nous récupérons le paramètre saisi par l'utilisateur afin de créer une variable nommée %répertoire%.
Nous définissons deux compteurs qui sont chacun initialisés sur 0.
La première commande va compter les fichiers. Nous nous servons du commutateur /a:-d dans la commande "Dir" afin de ne pas afficher les répertoires trouvés.
La seconde commande utilise la fonctionnalité inverse de la commande "Dir".

Supprimer le contenu d'un répertoire cible
Dans un nouveau fichier batch copiez ce contenu :

@echo off
pushd %1
del /q "*.*"
for /f "tokens=*" %%a in ('dir /b /ad') do rd /s /q "%%a"
popd

Saisissez le nom du fichier Batch suivi de l'emplacement et du nom du répertoire à "vider". Le répertoire "parent" restera intact tandis que l'intégralité de son contenu (fichiers et sous-répertoires) sera supprimé.
Le principe est de récupérer l'arborescence spécifiée par l'utilisateur pour "pousser" (pushd) l'indicatif à l'emplacement voulu.
La commande "Del" supprime tous les fichiers du nouveau répertoire par défaut.
Nous utilisons la commande "Dir" afin de n'afficher que les répertoires. Pour chaque occurrence trouvée nous nous servons de la commande "Rd".
La dernière ligne nous permet de revenir à notre point de départ (popd).

Analyser les fichiers
Créez un nouveau fichier Batch contenant :

@echo off
set nom=%1
for /f %%a in ('find /v /c "" ^< %nom%') do set /a lignes=%%a
@echo Il y a %lignes% lignes dans le fichier %nom%

Saisissez le nom du fichier batch suivi du nom du fichier à analyser. La seconde ligne du script nous permet de récupérer le nom du fichier en nous servant de la variable %1 qui désigne le premier paramètre saisi par l'utilisateur à la suite de la commande.
La commande find /v /c "" affiche toutes les lignes qui contiennent autre chose que rien (""), opère un décompte puis affiche le total (/c).
En admettant que la recherche porte sur un fichier nommé Fichier.txt, vous auriez pu saisir directement cette commande :
for /f %a in ('find /v /c "" ^< fichier.txt') do @echo Il y a %a lignes.

Créer un fichier contenant un texte plusieurs fois répétés
Vous pouvez vous inspirer de cet exemple de fichier Batch :

@echo off
for %%a in (1 2 3 4 5 6 7 8 9) do echo Ligne %%a>>test.txt

Compter les lignes d'un fichier et en afficher un nombre déterminé
Nous nous inspirons dans ce paragraphes et les autres scripts portant sur l'analyse des fichiers de certains exemples publiés par Ritchie Lawrence à partir de son site Web : www.commandline.co.uk/index.html. Dans un nouveau document Batch copiez les lignes suivantes :

set fichier=%1
set nombre=%2
for /f %%a in ('find /v /c "" ^< %fichier%') do set /a lignes=%%a
@echo Il y a %lignes% lignes dans le fichier %fichier%.
if %nombre% geq %lignes% set /a A=0&goto Sortie
set /a A=%lignes% - %nombre%
:Sortie
more /e +%A% %fichier%

Saisissez à la suite de votre "Batch" le nom du fichier suivi du nombre de lignes à afficher.
Nous reprenons le principe du précédent Batch pour la première partie du script.
Si le nombre saisi par l'utilisateur est supérieur ou égale au nombre de lignes trouvées nous exécutons la commande spécifiée sous l'étiquette :Sortie.
Dans le cas contraire, nous définissons la variable %A comme étant le produit de la soustraction entre le nombre de lignes et le nombre spécifié par l'utilisateur puis exécutons la dernière commande du script.
Dans tous les cas, la commande "More" affiche le résultat tel que nous l'avons voulu du contenu de notre fichier.

Vérifier la présence d'une chaîne de caractères
Dans un nouveau fichier Batch copiez ce contenu :

@echo off
findstr "212.37.221.109 Microapp.com" %systemroot%\system32\drivers\etc\hosts
if %errorlevel%==0 goto Msg
echo 212.37.221.109 Microapp.com >> %systemroot%\system32\drivers\etc\hosts
goto :eof
:Msg
echo Le fichier Hosts est déjà à jour !

Le fichier Hosts consigne un certain nombre de sites en faisant le lien entre l'adresse IP et le nom du site. Vous pouvez de cette façon soit faciliter l'accès à un site (il ne sera pas effectué de requête auprès des serveurs DNS) ou en interdire l'accès (en spécifiant à la suite du nom de domaine l'adresse locale de l'ordinateur).
Notre script se contente de vérifier l'existence de l'enregistrement spécifié. Si c'est le cas (if %errorlevel%==0) alors nous exécuterons les commandes indiquées sous l'étiquette :Msg.
Sinon nous ajoutons la ligne d'enregistrement dans le fichier Hosts et terminons le script par la commande goto:eof.

Supprimer ou remplacer une chaîne de caractères dans un texte
Dans un nouveau fichier Batch saisissez ceci :

for /f "delims=" %%a in ('type "%1"') do call :commande "%%a"
goto :eof
:commande
set ligne=%1
set ligne=%ligne:"=%
@echo %ligne% >>fichier2.txt

Dans ce script nous nous proposons de supprimer tous les guillemets...
Saisissez simplement le nom du script suivi du nom du fichier à modifier. Une version expurgée sera automatiquement générée.
Nous nous servons de la commande "Type" pour afficher le contenu du fichier.
Pour chaque ligne affichée par la commande "Type" nous créons une variable nommée %ligne%.
Dans cette variable nous opérons une substitution en remplaçant tous les signes " par rien ("=).
La nouvelle ligne une fois formatée, nous l'"empilons" dans un fichier nommé Fichier2.txt et ce en nous servant de la commande "Echo".

Retrouver une chaîne de caractères dans différents fichiers
Dans un nouveau fichier Batch copiez ce contenu :

@echo off
set dossier=%1
set filtre=%2
set chaîne=%3
for /f "tokens=*" %%a in ('dir "%dossier%\%filtre%" /s /b') do (
for /f "tokens=*" %%z in ('type "%%a"^|findstr /l /i /c:"%chaîne%"') do (
@echo %%ass:%%z
)
)

La syntaxe vous permettant de lancer votre fichier Batch sera celle -ci :
Nom_Batch Emplacement Nom_Fichiers Chaîne
Par exemple et en admettant que votre fichier Batch se nomme Test.bat, si vous souhaitez savoir quels sont les fichiers texte placés dans C:\Source qui contiennent la chaîne de caractères "Jean", saisissez :
Test c:\source *.txt Jean
Nous définissons trois variables qui correspondent aux paramètres saisis par l'utilisateur.
Un jeton est alloué à chaque ligne trouvée dans la sortie écran de la commande "Dir".
Nous obtenons à chaque fois une variable %f qui sera le nom du fichier.
Cette variable est reprise de telle sorte que "Type" puisse afficher le fichier spécifié.
Un autre jeton est alloué à chaque ligne trouvé dans le fichier analysé.
La commande "Findstr" permet de filtrer que les lignes contenant la chaîne de caractères "Jean".
Les deux variables ainsi obtenues %f et %z seront affichées par la commande "Echo".

Trouver une même occurrence dans plusieurs fichiers
Ce fichier Batch sait le faire :

for /f "delims=" %%a in ('findstr /m Microapp.com c:\*.*') do echo "%%a"

Une autre manière de supprimer les guillemets ?
Si dans un fichier .txt vous avez ce type de contenu :

ligne, 1, mot, 1
ligne, 2, mot, 2

Ces deux commandes vont nous permettre d'afficher que les chiffres ou que les chaînes de caractères :
for /f "tokens=2,4 delims=," %a in (fichier.txt) do (echo %a %b)
for /f "tokens=1,3 delims=," %a in (fichier.txt) do (echo %a %b)
Si, par contre le contenu du fichier ressemble à celui-ci :

ligne "1" mot "1"
ligne "2" mot "2"

Vous devez vous inspirer de ce fichier Batch :

@echo off
setlocal EnableDelayedExpansion
for /f "tokens=*" %%a in ('type "Fichier.txt"') do (
set ligne=%%a
echo !ligne:"=!
)>> temp.txt
for /f "tokens=1,3 delims= " %%a in (temp.txt) do (echo %%a %%b)
del temp.txt

Tout d'abord nous précisons que nous allons nous servir des variables dynamiques.
La commande "Type" permet d'afficher le contenu du fichier.
À chaque ligne trouvée est allouée une variable %a.
Nous redirigeons chacune de ces lignes dans un fichier nommé Temp.txt.
Nous nous servons de la commande "Echo" et de la variable %ligne% mais placée, cette fois-ci, entre deux points d'exclamation. Au passage, nous opérons une substitution en remplaçant tous les guillemets trouvés par rien (echo !ligne:"=!).
Il suffit après de reprendre le fichier Temp.txt afin d'afficher son contenu "transformé".
Par mesure de "propreté" nous supprimons le fichier temporaire dont nous nous sommes servi.

Afficher les informations d'un fichier
Dans un nouveau fichier nommé Script.bat copiez ce contenu :

@echo off
set nom=%1%
for /f %%a in ('dir "%nom%" /s /b /-c /a:-d-s-h') do echo %%~za octets
for /f "skip=4 tokens=1,2" %%a in ('dir "%nom%" /tc /-c /a:-d-s-h^|find /v "(s)"') do echo Créé le %%a %%b
for /f "skip=4 tokens=1,2" %%a in ('dir "%nom%" /tw /-c /a:-d-s-h^|find /v "(s)"') do echo Modifié le %%a %%b
for /f "skip=4 tokens=1,2" %%a in ('dir "%nom%" /ta /-c /a:-d-s-h^|find /v "(s)"') do echo Dernier accès le %%a %%b

Saisissez le nom du Batch suivi du nom du fichier à analyser.
Pour bien comprendre comment fonctionne ce script comparez ces deux commandes :
dir "fichier.txt" /tc /-c /a:-d-s-h
dir "fichier.txt" /tc /-c /a:-d-s-h |find /v "(s)"
La seconde commande a biffé toutes les informations contenant la chaîne de caractères "(s)" comme celle-ci : "1 fichier(s)".
Reste maintenant à supprimer les lignes d'informations d'en-tête. C'est le pourquoi de l'emploi du mot-clé "skip=4". De cette façon, nous n'analysons que la seconde ligne de la sortie écran produit par la commande "Dir".
Je précise que le chiffre de 4 lignes ne correspond pas à la réalité mais, curieusement, cela fonctionne aussi bien que si nous demandons de "sauter" les cinq premières lignes ?

Modifier un texte
Imaginons un fichier nommé Test.txt ayant ce contenu :

Colonne Colonne Colonne
Colonne Colonne Colonne
etc.

Nous souhaitons placer devant chaque colonne un numéro. Dans un nouveau fichier Batch copiez ceci :
for /f "tokens=1,2,*" %%a in ('type test.txt') do echo 1 %%a 2 %%b 3 %%c > test.txt
Nous balayons à l'aide de la commande "For" le fichier spécifié en envoyant à chaque bloc rencontré le numéro de la colonne.
Si vous souhaitez revenir en arrière, créez un autre fichier Batch avec ce contenu :
for /f "tokens=2,4,6" %%a in ('type test.txt') do echo %%a %%b %%c > test.txt
Mettre une ligne sur une colonne
Inspirez-vous de ce modèle de script :

for /f "tokens=1,2,*" %%a in ('type test.txt') do (
echo %%a
echo %%b
echo %%c
) >> sortie.txt

Dans ce cas, le principe consiste à récupérer chaque bloc de données puis de se servir de la commande "Echo" pour créer un autre fichier nommé Sortie.txt.
L'utilisation des parenthèses permet d'entasser les lignes dans un même fichier.

Lire le contenu d'un fichier texte
Il y a plusieurs méthodes possibles. Dans un nouveau fichier Batch, copiez ceci :

@echo off
for /f "delims=" %%a in (test.txt) do echo %%a
for /f "delims=" %%a in ('type test.txt') do echo %%a
for /f "delims=" %%a in ('more ^< test.txt') do echo %%a

Comme nous le voyons le contenu est identique mais certaines commandes s'avèrent plus efficace dans le cas de scripts complexes.

Supprimer toutes les lignes vides d'un fichier
Vous pouvez vous inspirer de ce type de fichier Batch :

@echo off
for /f "delims=" %%a in ('type fichier.txt') do echo.%%a>>fichier1.txt

Une nouvelle version du fichier sera créée...

Afficher la première ou la dernière ligne d'un fichier
Dans un nouveau fichier Batch, copiez ceci :

@echo off
set "ligne1="
for /f "delims=" %%a in ('type fichier.txt') do (
if not defined ligne1 set ligne1=%%a
)
echo %ligne1%

Nous définissons une variable nommé" %ligne1% que nous ne définissons pas.
Pour chaque ligne rencontrée par la commande "For" nous définissons la variable %ligne1% sur la première ligne puis reprenons la commande pour la seconde ligne présente dans le fichier.
Mais puisque notre variable est déjà définie nous ne lui attribuerons plus d'autre valeur. Et donc nous afficherons que le contenu de la première ligne.
En sens inverse, vous pouvez utiliser ce type d'astuce :

@echo off
for /f "delims=" %%a in ('type fichier.txt') do set "dernière=%%a"
echo %dernière%

Là, c'est beaucoup plus simple ! Nous nous contentons d'afficher la dernière valeur trouvée pour la variable %dernière% et c'est forcément la dernière ligne parcourue par la commande "For".

Afficher un certain nombre de lignes
Dans un nouveau fichier Batch, copiez ceci :

@echo off
set "lignes=%1"
set B=-1
set "C="
for /f "delims=" %%a in ('type fichier.txt') do (
set/a B+=1 & for /f %%z in ('echo %%B%%') do (
if "%%z"=="%lignes%" set C=1
)
if not defined C echo %%a
)

Il suffit de saisir le nom du script suivi du nombre de premières lignes que nous souhaitons afficher.
Nous posons trois variables : %lignes%, %B% et %C%. Cette dernière n'étant pas définie. La variable %lignes% correspond au nombre de lignes saisie par l'utilisateur à la suite du nom du Batch. La variable %B% reçoit une valeur négative au cas où l'utilisateur ne veuille afficher qu'une ligne.
Un balayage du fichier est effectué par la commande "For" et nous passons à l'opération suivante :
Nous incrémentons la variable %B% d'un pas de un et nous affichons la valeur obtenue.
Un second balayage est alors effectué : si la variable obtenue correspond au nombre de lignes spécifié par l'utilisateur alors nous définissons la variable %C% sur 1.
À l'inverse, si la variable %C% n'est pas définie alors nous affichons la ligne en cours. En d'autres termes, si %z n'est pas encore égale à %lignes% alors nous affichons la ligne en cours. Quand la variable %z sera égale à %lignes% alors nous n'afficherons pas la ligne en cours.
Étant donné que nous ne visualiserons que les lignes affichées par la commande "Echo" nous garderons l'impression que seules ces lignes ont été parcourues.
En sens inverse, voici une suggestion :

@echo off
set "lignes=%1"
for /f %%a in ('find /c /v "" ^< fichier.txt') do set/a Suppression=%%a-lignes
for /f "delims=" %%a in ('more /e +%Suppression% ^< fichier.txt') do echo %%a

Dans ce cas nous affichons les deux dernières lignes.
Dans un premier temps nous définissons une variable nommée %suppression%.
La commande Find /c /v "" nous permet d'obtenir le nombre de lignes qui ne sont pas vides.
La valeur de %suppression% s'obtient à faisant la soustraction du nombre de lignes par le nombre de lignes à afficher.
La commande "More" nous permet de n'afficher que la première ligne à partir de la valeur de %suppression%.
Si, par exemple, notre fichier compte 11 lignes et que nous souhaitez afficher que les deux dernières lignes, le calcul opéré par le Batch est le suivant : 11 - 2 = 9. Nous afficherons donc le contenu du fichier à partir de la 9ème ligne et donc deux lignes seront "relayées" par la commande "Echo".

Afficher une ligne précise
Dans un nouveau fichier Batch copiez ce contenu :

@echo off
set Numéro=%1
set "ligne="
set/a Numéro-=1
for /f "delims=" %%a in ('more/e +%%Numéro%% ^< fichier.txt') do (
if not defined ligne set "ligne=%%a"
)
echo %ligne%

Saisissez le nom du script suivi du numéro de ligne à afficher.
Là aussi, saisissez cette commande :
echo /e +2 fichier.txt
Nous afficherons le contenu de Fichier.txt à partir de la seconde ligne.
Nous effectuons un balayage à l'aide de la commande "For".
À chaque fois nous essayons de définir la variable %ligne% sur la ligne en cours. Mais comme la variable %ligne% est définie dès la première ligne trouvée nous n'affichons que cette première ligne. Et comme la première ligne trouvée correspond bien à celle à partir de laquelle nous exécutons la commande, c'est la ligne correcte qui sera relayée par la commande "Echo".

Paramétrer les sorties
Comparez la mise en page produite par ces trois fichiers Batch :

echo BLABLA >sortie1.txt
echo BLABLA >>sortie1.txt

echo.|set /p=BLABLA >sortie2.txt
echo.BLABLA >>sortie2.txt

echo BLABLA ^BLABLA >sortie3.txt

Le signe ^ provoque un retour chariot.

Renvoyez le code d'erreur d'un fichier Batch
Dans un nouveau fichier Batch copiez ce contenu :

@echo off
dir *.doc
for %%a in (5 4 3 2 1 0) do if errorlevel==%%a (
set code=%%a
goto erreur
)
:erreur
echo Le code renvoyé par la commande est %code%

Retrouver la version d'Internet Explorer
Nous avons adapté un script proposé par Jerold Schulman à partir de son site Web : www.jsiinc.com. Dans un nouveau fichier Batch copiez ce contenu :

@echo off
set valeur=reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer" /v Version
set version=findstr /I /L /C:"REG_SZ"
for /f "tokens=1,2,3" %%a in ('%valeur%^|%version%') do @echo La version d'IE est : %%c

Cette information est consignée dans le Registre Windows. Nous interrogeons donc le Registre en parcourant cette arborescence : HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer.
Nous définissons une variable nommée %valeur% qui sera la sortie écran de la commande "Reg query".
Nous posons ensuite une variable nommée %version% qui sera la commande "Findstr" paramétrée pour rechercher la chaîne de caractères "REG_SZ".
Enfin, nous effectuons un balayage dans la sortie écran affichée par la commande "Findstr" (remplacée par la variable %valeur%) et nous ne relayons que le troisième bloc de données trouvé.

Un script pour redémarrer votre ordinateur
Dans un nouveau fichier Batch, copiez ce contenu :

set /p question=Redémarrez votre ordinateur [O/N]?
if /i not "%question%"=="O"
@shutdown -r

Ce sera l'utilisateur qui définira la valeur de la variable %question%. Si cette dernière est égale à o alors nous lançons la commande "Shutdown". Sinon, nous terminons le script en utilisant la commande "Goto :eof".

Calculer le temps passé sur une application
C'est une solution simple qui est proposée ici mais il est très facile d'améliorer ce script... Dans un nouveau fichier Batch copiez ce contenu :

@echo off
echo Lancement de Notepad >> journal.txt
for /f "tokens=*" %%a in ('date /t') do echo la date est le %%a >> journal.txt
for /f %%a in ('time /t') do echo l'heure est le %%a >> journal.txt
notepad
echo "Appuyez sur une touche afin d'enregistrer la date et l'heure de fermeture..." & pause >nul
echo Fermeture de Notepad >> journal.txt
for /f "tokens=*" %%a in ('date /t') do echo la date est le %%a >> journal.txt
for /f %%a in ('time /t') do echo l'heure est le %%a >> journal.txt

À chaque fois que nous lançons le Batch nous ouvrirons le Bloc-notes Windows. Tant que nous travaillerons sur cette application le fichier batch restera ouvert. La fermeture du programme oblige le script à afficher un message vous demandant d'appuyer sur une touche afin de continuer son exécution. Ces évènements seront consignés dans un fichier nommé Journal.txt. Ainsi, à tout moment il vous sera possible de consulter le temps passé sur tel ou tel document.



blog, bookmark, newsletter


catalogue interactif - abc-blagues - infopage - les societes - entrepreneurs de france - flashmeat topsitefr - radioduweb
c-rigolo - woopami - rire-et-sourire - pubstv - widouf - planete-nokia - streaming-fr - photo numérique - Vins Fromaget - Maisons en bois

© 2001-2008 Hotline-PC.org. Tous droits réservés. Ce site fait régulièrement l'objet d'un marquage IDDN.IDDN Certification
Un site du réseau : 

Contact - Plan du site - Notice légale
Blog Bookmark Newsletter