Différence commande DOS FOR entre XP et 7
Résolu/Fermé
A voir également:
- Différence commande DOS FOR entre XP et 7
- Invite de commande - Guide
- Différence entre tcp et udp - Guide
- Commande terminal mac - Guide
- Cle windows xp - Guide
- Difference entre million et milliard - Accueil - Technologies
19 réponses
j'aime bien la réponse de dubeck avec la commande more, ca marche super bien.
seulement j'ai eu un problème : j'avais besoin de parse le résultat de :
sans passer par un fichier temporaire.
problème, la commande FOR /F n'accepte pas "directement" de pipe dans son paramétrage.
après quelques recherches, voila la solution :
(il suffit d'escape le caractère "|" qui sert a pipe, et d'un coup, ça marche)
%%A renvoie successivement n valeurs, autant que de lecteurs (car il y a n lignes dans l'output de la commande)
attention a coder un truc pour récuperer %%A a chaque boucle.
Et voila, plus besoin de fichier temporaire pour stocker le résultat
PS : on peut appliquer la même chose en utilisant le SED.
PS2 : je ne sais pas si d'autre commandes renvoie des résultats avec des "NUL" en plein milieu, mais potentiellement ca marchera pareil
seulement j'ai eu un problème : j'avais besoin de parse le résultat de :
FSUTIL FSINFO DRIVES | MORE
sans passer par un fichier temporaire.
problème, la commande FOR /F n'accepte pas "directement" de pipe dans son paramétrage.
après quelques recherches, voila la solution :
(il suffit d'escape le caractère "|" qui sert a pipe, et d'un coup, ça marche)
FOR /F "TOKENS=*" %%A IN ('FSUTIL FSINFO DRIVES^| MORE') DO ( ECHO %%A )
%%A renvoie successivement n valeurs, autant que de lecteurs (car il y a n lignes dans l'output de la commande)
attention a coder un truc pour récuperer %%A a chaque boucle.
Et voila, plus besoin de fichier temporaire pour stocker le résultat
PS : on peut appliquer la même chose en utilisant le SED.
PS2 : je ne sais pas si d'autre commandes renvoie des résultats avec des "NUL" en plein milieu, mais potentiellement ca marchera pareil
bricomachin
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
134
15 juil. 2012 à 17:26
15 juil. 2012 à 17:26
Hello,
Est-ce que tu as besoin de récupérer les nom de lecteur ?
Si non tu peux écrire ta commande ainsi :
Et si oui ben... je réfléchis, je réfléchis promis :p
Bricomachin
Est-ce que tu as besoin de récupérer les nom de lecteur ?
Si non tu peux écrire ta commande ainsi :
for /f "tokens=2, * delims= " %%A in ('fsutil fsinfo drives') Do ( echo %%A %%B )
Et si oui ben... je réfléchis, je réfléchis promis :p
Bricomachin
Bonsoir,
Oui, j'ai besoin de (presque) tous les lecteurs. Dans la suite du scrit j'analyse chaque lecteur avec fsutil fsinfo drivetype <lecteur> pour trouver les lecteurs fixes.
Ca marche avec Windows 7 mais pas avec XP, c'est ça que je ne comprends pas.
Bernard
Oui, j'ai besoin de (presque) tous les lecteurs. Dans la suite du scrit j'analyse chaque lecteur avec fsutil fsinfo drivetype <lecteur> pour trouver les lecteurs fixes.
Ca marche avec Windows 7 mais pas avec XP, c'est ça que je ne comprends pas.
Bernard
ribotb
Messages postés
13
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
20 juillet 2012
15 juil. 2012 à 19:08
15 juil. 2012 à 19:08
Voilà docteur :-))
1. ça se plante > " * delims= " était innatendu
2. affiche > C:\
3. affiche > a:C:\ b: g:%G
4. affiche > b:
1. ça se plante > " * delims= " était innatendu
2. affiche > C:\
3. affiche > a:C:\ b: g:%G
4. affiche > b:
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
bricomachin
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
134
15 juil. 2012 à 19:24
15 juil. 2012 à 19:24
Salut,
Ahhhhh illumination soudaine ! Mais je me trompe peut-être :p
Essaie comme ça:
J'ai remplacé les ' par des ' (guillemets simples inverses)...
En espérant ne pas passer pour un c** :p,
Bricomachin
Ahhhhh illumination soudaine ! Mais je me trompe peut-être :p
Essaie comme ça:
for /f "usebackq tokens=2, 3, 4,5,6,7,8,9 delims= " %%A in ('fsutil fsinfo drives') Do ( echo %%A %%B %%C %%D %%E %%F %%G %%H )
J'ai remplacé les ' par des ' (guillemets simples inverses)...
En espérant ne pas passer pour un c** :p,
Bricomachin
bricomachin
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
134
15 juil. 2012 à 19:26
15 juil. 2012 à 19:26
Finalement en me relisant je me dis que je vais vraiment passer pour un c** ^^
ribotb
Messages postés
13
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
20 juillet 2012
15 juil. 2012 à 19:56
15 juil. 2012 à 19:56
En remplaçant les ' par des ' l'echo nous dit...
fsinfo drive
!? (ça, c'est de moi :-))
fsinfo drive
!? (ça, c'est de moi :-))
bricomachin
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
134
15 juil. 2012 à 20:29
15 juil. 2012 à 20:29
ouais c'est parce qu'il analyse "fsutil fsinfo drives" et pas la sortie. Tu pourrais essayer d'enregistrer le résultat dans une variable puis d'analyser la variable non ?
bricomachin
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
134
Modifié par bricomachin le 15/07/2012 à 22:09
Modifié par bricomachin le 15/07/2012 à 22:09
Et si tu fais ça, ça marche ?:
Un petit merci fait toujours plaisir ainsi qu'une orthographe correcte.
Les posts ont eux aussi droit à une retraite ! Pensez à mettre votre sujet en résolu :p
fsutil fsinfo drives>disques.txt for /f "tokens=2, 3, 4,5,6,7,8,9 delims= " %%A in (disques.txt) Do ( echo %%A %%B %%C %%D %%E %%F %%G %%H )(Essayons de voir si ça bug car on utilise une sortie de commande...)
Un petit merci fait toujours plaisir ainsi qu'une orthographe correcte.
Les posts ont eux aussi droit à une retraite ! Pensez à mettre votre sujet en résolu :p
bricomachin
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
134
Modifié par bricomachin le 15/07/2012 à 22:08
Modifié par bricomachin le 15/07/2012 à 22:08
Et comme ça ?:
for /f "tokens=2-9 delims= " %%A in ('fsutil fsinfo drives') Do (
echo %%A %%B %%C %%D %%E %%F %%G %%H
)
ribotb
Messages postés
13
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
20 juillet 2012
16 juil. 2012 à 08:53
16 juil. 2012 à 08:53
Bonjour "Bricomachin",
J'ai repris les tests ce matin. En ce qui concerne tes dernières suggestions :
fsutil fsinfo drives>disques.txt
for /f "tokens=2, 3, 4,5,6,7,8,9 delims= " %%A in (disques.txt) Do (
echo %%A %%B %%C %%D %%E %%F %%G %%H
)
C'est quelque chose que j'avais essayé mais qui ne donne toujours pas le résultat escompté. Le contenu du fichier est bon mais la commande FOR ne récupère pas les lecteurs.
for /f "tokens=2-9 delims= " %%A in ('fsutil fsinfo drives') Do (
echo %%A %%B %%C %%D %%E %%F %%G %%H
)
On ne récupère que C:\
Merci quand même pour tes suggestions.
Bonne journée,
Bernard
J'ai repris les tests ce matin. En ce qui concerne tes dernières suggestions :
fsutil fsinfo drives>disques.txt
for /f "tokens=2, 3, 4,5,6,7,8,9 delims= " %%A in (disques.txt) Do (
echo %%A %%B %%C %%D %%E %%F %%G %%H
)
C'est quelque chose que j'avais essayé mais qui ne donne toujours pas le résultat escompté. Le contenu du fichier est bon mais la commande FOR ne récupère pas les lecteurs.
for /f "tokens=2-9 delims= " %%A in ('fsutil fsinfo drives') Do (
echo %%A %%B %%C %%D %%E %%F %%G %%H
)
On ne récupère que C:\
Merci quand même pour tes suggestions.
Bonne journée,
Bernard
Pierrot6150
Messages postés
1619
Date d'inscription
lundi 4 mai 2009
Statut
Membre
Dernière intervention
8 janvier 2017
560
16 juil. 2012 à 09:09
16 juil. 2012 à 09:09
Et ceci ???
@echo off
echo. Lister lecteur fixe du PC
echo.
SETLOCAL ENABLEDELAYEDEXPANSION
for %%I in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
set Data=%%I:
set Lecteur=!Data:~0,2!
call :_Check_Drive
)
echo.
echo. Terminer
pause
exit
:_Check_Drive
fsutil fsinfo drivetype !Lecteur! | find "Lecteur fixe" >nul
if %errorlevel% equ 0 fsutil fsinfo drivetype !Lecteur!
goto :EOF
@echo off
echo. Lister lecteur fixe du PC
echo.
SETLOCAL ENABLEDELAYEDEXPANSION
for %%I in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
set Data=%%I:
set Lecteur=!Data:~0,2!
call :_Check_Drive
)
echo.
echo. Terminer
pause
exit
:_Check_Drive
fsutil fsinfo drivetype !Lecteur! | find "Lecteur fixe" >nul
if %errorlevel% equ 0 fsutil fsinfo drivetype !Lecteur!
goto :EOF
ribotb
Messages postés
13
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
20 juillet 2012
16 juil. 2012 à 09:54
16 juil. 2012 à 09:54
J'ai trouvé d'où vient le problème/ J'ai examiné le fichier en sortie du fsutil avec un éditeur hexadécimal et j'ai vu que le séparateur entre les lecteurs était différent entre XP et Seven.
Sous Seven le séparateur est l'espace (20 en hexa).
Sous XP le séparateur est NUL (00 en hexa) !
Problème : comment coder NUL dans le "delims=" de la commande FOR ?
Bernard
Sous Seven le séparateur est l'espace (20 en hexa).
Sous XP le séparateur est NUL (00 en hexa) !
Problème : comment coder NUL dans le "delims=" de la commande FOR ?
Bernard
bricomachin
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
134
Modifié par bricomachin le 16/07/2012 à 10:47
Modifié par bricomachin le 16/07/2012 à 10:47
ouahou là c'était une idée de génie ! chapeau !
Essaye de faire un simple copier-coller du fichier texte généré avec
Tu l'ouvre avec le bloc-note, si ça ne marche pas, avc notepad++ qui, je crois, permet de voir toutes ces petites subtilités d'un code ^^
Essaye de faire un simple copier-coller du fichier texte généré avec
fsutil etc... >fichier.txt.
Tu l'ouvre avec le bloc-note, si ça ne marche pas, avc notepad++ qui, je crois, permet de voir toutes ces petites subtilités d'un code ^^
bricomachin
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
134
Modifié par bricomachin le 16/07/2012 à 11:00
Modifié par bricomachin le 16/07/2012 à 11:00
J'ai trouvé je crois : essaye de taper
source :http://www.table-ascii.com/
^@dans le cmd.C'est le signe pour NUL tout comme taper
^Gfait un bref bip sonore... Maintenant pour trouver le caractère correspondant on pourrait faire :
echo ^@>test.txtC'est comme ça que j'ai défini le caractère qui fait bip dans un batch...
source :http://www.table-ascii.com/
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
16 juil. 2012 à 11:46
16 juil. 2012 à 11:46
hllo
en ajoutant more , les \0 sont transformés en sauts de ligne 0x0a 0x0d
en ajoutant more , les \0 sont transformés en sauts de ligne 0x0a 0x0d
fsutil fsinfo drives | more | od -x 000000 0a0d 654c 7463 7565 7372 3aff 4320 5c3a 000020 0a0d 3a44 0d5c 0d0a 0d0a 000a 000033
ribotb
Messages postés
13
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
20 juillet 2012
16 juil. 2012 à 19:18
16 juil. 2012 à 19:18
Bonsoir Bricomachin,
J'ai essayé avec ^@ et ^G mais ça n'a rien donné. Et je n'ai pas compris ta dernière suggestion : l'utilisation de more.
Par contre je suis en train de mettre au point un sed pour remplacer le NUL (x00) par l'espace (x20).
Bonne soirée,
Bernard
J'ai essayé avec ^@ et ^G mais ça n'a rien donné. Et je n'ai pas compris ta dernière suggestion : l'utilisation de more.
Par contre je suis en train de mettre au point un sed pour remplacer le NUL (x00) par l'espace (x20).
Bonne soirée,
Bernard
bricomachin
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
134
17 juil. 2012 à 16:00
17 juil. 2012 à 16:00
Hello ribotb,
Donc pour le ^@ ça correspond à Crtl + @ dans l'invité de commande... Je sais je n'ai pas été très clair désolé. Lorsque tu tape Ctrl + une touche il s'écrit : ^Touche... Si tu tape Ctrl+ G (^G) et ENTER ça fait beeep ! Donc quand j'ai trouvé la table ASSCI avec les touches "Ctrl + Touche" et que j'ai vu que NUL était répertorié et que c'était Ctrl +@ dans l'invité de commande, je me suis dis que ça irai mais je n'avais pas réfléchi au fait que @ n'est pas une touche de base... et donc que je ne pouvais faire Crtl+@ vu que c'est Ctrl + (AltGr +2) vu que pour faire @ chez moi c'est AltGr +2 (ça dépend des claviers...) donc cette possibilité tombe à l'eau désolé...
Et puis pour le |more, ce n'est pas moi qui est répondu :p mais je n'ai pas compris non-plus ^^ Le mec a l'air calé et je ne connais pas assez l'hexa et tout ça pour donner mon point de vue...
Maintenant, à moi de poser une question :
C'est quoi un sed ^^' ?
...
Bricomachin
Donc pour le ^@ ça correspond à Crtl + @ dans l'invité de commande... Je sais je n'ai pas été très clair désolé. Lorsque tu tape Ctrl + une touche il s'écrit : ^Touche... Si tu tape Ctrl+ G (^G) et ENTER ça fait beeep ! Donc quand j'ai trouvé la table ASSCI avec les touches "Ctrl + Touche" et que j'ai vu que NUL était répertorié et que c'était Ctrl +@ dans l'invité de commande, je me suis dis que ça irai mais je n'avais pas réfléchi au fait que @ n'est pas une touche de base... et donc que je ne pouvais faire Crtl+@ vu que c'est Ctrl + (AltGr +2) vu que pour faire @ chez moi c'est AltGr +2 (ça dépend des claviers...) donc cette possibilité tombe à l'eau désolé...
Et puis pour le |more, ce n'est pas moi qui est répondu :p mais je n'ai pas compris non-plus ^^ Le mec a l'air calé et je ne connais pas assez l'hexa et tout ça pour donner mon point de vue...
Maintenant, à moi de poser une question :
C'est quoi un sed ^^' ?
...
Bricomachin
ribotb
Messages postés
13
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
20 juillet 2012
17 juil. 2012 à 19:48
17 juil. 2012 à 19:48
Bonsoir "Bricomachin",
J'ai découvert sed récemment. C'est une commande d'origine Unix qui a été développé (comme des tas d'autres commandes) pour Windows. Tout ce que j'en sais au jour d'aujourd'hui c'est qu'elle permet, entre autres choses, de remplacer des chaînes de caractère avec possibilité de coder de l'hexadécimal.
Ce qui donne donc pour mon problème ;
fsutil fsinfo drives | sed s/\x0/" "/g >%TEMP%\disques.txt
for /f "skip=1 tokens=2,3,4,5,6,7,8 delims= " %%A in (%TEMP%\disques.txt) Do (...
On dirige le résultat du fsutil dans un fichier texte en ayant au passage (enchaînement par le "pipe" |) remplacé les NUL x0 par des espaces " 3.
Le fichier est ensuite repris dans la commande FOR pour récupérer chaque lecteur.
Tu peux récupérer les "GNU utilities for Win32" ici : http://unxutils.sourceforge.net/ Tu prends le fichier UnxUpdates.zip, l'autre lien se plante. Tu mets les outils dont tu as besoin dans %Windir%\System32.
Bernard
J'ai découvert sed récemment. C'est une commande d'origine Unix qui a été développé (comme des tas d'autres commandes) pour Windows. Tout ce que j'en sais au jour d'aujourd'hui c'est qu'elle permet, entre autres choses, de remplacer des chaînes de caractère avec possibilité de coder de l'hexadécimal.
Ce qui donne donc pour mon problème ;
fsutil fsinfo drives | sed s/\x0/" "/g >%TEMP%\disques.txt
for /f "skip=1 tokens=2,3,4,5,6,7,8 delims= " %%A in (%TEMP%\disques.txt) Do (...
On dirige le résultat du fsutil dans un fichier texte en ayant au passage (enchaînement par le "pipe" |) remplacé les NUL x0 par des espaces " 3.
Le fichier est ensuite repris dans la commande FOR pour récupérer chaque lecteur.
Tu peux récupérer les "GNU utilities for Win32" ici : http://unxutils.sourceforge.net/ Tu prends le fichier UnxUpdates.zip, l'autre lien se plante. Tu mets les outils dont tu as besoin dans %Windir%\System32.
Bernard
bricomachin
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
134
17 juil. 2012 à 21:25
17 juil. 2012 à 21:25
ça a vraiment l'aire bien... je télécharge tout de suite...
À part ça tu n'as donc plus besoin d'aide ... ?
À part ça tu n'as donc plus besoin d'aide ... ?
ribotb
Messages postés
13
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
20 juillet 2012
17 juil. 2012 à 22:50
17 juil. 2012 à 22:50
A part mon plantage ("Pas de disque") on peut considérer que le problème pour lequel j'ai ouvert le sujet est réglé (grâce au fameux "sed").
Je vais quand même tester la solution de Pierrot6150, ajouter un commentaire et clore le sujet.
En tout cas merci pour ton aide qui m'a mis sur la voie dès ta première réponse.
Au plaisir,
Bernard
Je vais quand même tester la solution de Pierrot6150, ajouter un commentaire et clore le sujet.
En tout cas merci pour ton aide qui m'a mis sur la voie dès ta première réponse.
Au plaisir,
Bernard
bricomachin
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
134
17 juil. 2012 à 22:57
17 juil. 2012 à 22:57
Pas de problème ça m'a fait très plaisir d'avoir pu aider.
Bon alors bonne suite @++
Bon alors bonne suite @++
ribotb
Messages postés
13
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
20 juillet 2012
17 juil. 2012 à 23:19
17 juil. 2012 à 23:19
Et merci également à Pierrot6150 pour sa solution qui fonctionne aussi bien sous Seven qu'XP, et que je vais peut-être adopter parce qu'elle ne nécessite pas d'installer un module supplémentaire (sed.exe).
Bernard
Bernard
ribotb
Messages postés
13
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
20 juillet 2012
19 juil. 2012 à 22:15
19 juil. 2012 à 22:15
Je reviens pour faire appel à Pierrot6150. Je voulais modifier le script mais je suis complètement largué. C'est une manière de coder du batch que je ne connais pas.
Après avoir déterminé si un lecteur est fixe, je vaudrais savoir si "le lecteur est intègre" avec une commande fsutil dirty query <lecteur> et s'il est intègre lancer un checkdsk <lecteeur>
.
Pierrot6150, merci par avance de ton aide.
Bernard
Après avoir déterminé si un lecteur est fixe, je vaudrais savoir si "le lecteur est intègre" avec une commande fsutil dirty query <lecteur> et s'il est intègre lancer un checkdsk <lecteeur>
.
Pierrot6150, merci par avance de ton aide.
Bernard
Pierrot6150
Messages postés
1619
Date d'inscription
lundi 4 mai 2009
Statut
Membre
Dernière intervention
8 janvier 2017
560
20 juil. 2012 à 03:24
20 juil. 2012 à 03:24
Salut,
C'est plutôt le contraire, si le HDD n'est pas intègre qu'il faut faire une réparation par CHKDSK.
:_Check_Drive
fsutil fsinfo drivetype !Lecteur! | find "Lecteur fixe" >nul
rem Si tu veux de l'affichage...
rem if %errorlevel% equ 0 fsutil fsinfo drivetype !Lecteur! && call :_VolumeIsIntegre
rem Ici pas d'affichage.
if %errorlevel% equ 0 call :_VolumeIsIntegre
goto :EOF
:_VolumeIsIntegre
rem Vérifier si le volume est intègre.
rem La recherche ce fait sur le volume n'est pas intègre.
fsutil dirty query !Lecteur! | find "n'est pas" >nul
if %errorlevel% equ 0 chkdsk !Lecteur! /F /R
goto :EOF
C'est plutôt le contraire, si le HDD n'est pas intègre qu'il faut faire une réparation par CHKDSK.
:_Check_Drive
fsutil fsinfo drivetype !Lecteur! | find "Lecteur fixe" >nul
rem Si tu veux de l'affichage...
rem if %errorlevel% equ 0 fsutil fsinfo drivetype !Lecteur! && call :_VolumeIsIntegre
rem Ici pas d'affichage.
if %errorlevel% equ 0 call :_VolumeIsIntegre
goto :EOF
:_VolumeIsIntegre
rem Vérifier si le volume est intègre.
rem La recherche ce fait sur le volume n'est pas intègre.
fsutil dirty query !Lecteur! | find "n'est pas" >nul
if %errorlevel% equ 0 chkdsk !Lecteur! /F /R
goto :EOF
ribotb
Messages postés
13
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
20 juillet 2012
20 juil. 2012 à 08:31
20 juil. 2012 à 08:31
Bonjour,
"C'est plutôt le contraire, si le HDD n'est pas intègre qu'il faut faire une réparation par CHKDSK"
Euh, oui... J'étais un peu fatigué hier soir :-))
Je te remercie pour ton script. Je vais le tester mais franchement je suis complètement largué, c'est du batch de haut niveau :-))
Bonne journée,
Bernard
"C'est plutôt le contraire, si le HDD n'est pas intègre qu'il faut faire une réparation par CHKDSK"
Euh, oui... J'étais un peu fatigué hier soir :-))
Je te remercie pour ton script. Je vais le tester mais franchement je suis complètement largué, c'est du batch de haut niveau :-))
Bonne journée,
Bernard
ribotb
Messages postés
13
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
20 juillet 2012
20 juil. 2012 à 17:33
20 juil. 2012 à 17:33
Bonjour Pierrot6150,
Je vais abuser une dernière fois (j'espère de tes grandes compétences et te solliciter à nouveau. Dans la procédure _VolumeIsIntegre j'ai essayé d'ajouter l'affichage du résultat de fsutil dirty query !Lecteur! pour chaque lecteur (le lecteur est intègre / le lecteur n'est pas intègre). Je n'y suis pas arrivé :-((
Bernard
Je vais abuser une dernière fois (j'espère de tes grandes compétences et te solliciter à nouveau. Dans la procédure _VolumeIsIntegre j'ai essayé d'ajouter l'affichage du résultat de fsutil dirty query !Lecteur! pour chaque lecteur (le lecteur est intègre / le lecteur n'est pas intègre). Je n'y suis pas arrivé :-((
Bernard
Pierrot6150
Messages postés
1619
Date d'inscription
lundi 4 mai 2009
Statut
Membre
Dernière intervention
8 janvier 2017
560
Modifié par Pierrot6150 le 21/07/2012 à 06:39
Modifié par Pierrot6150 le 21/07/2012 à 06:39
Modifier le prg pour ajouter les 3 lignes en gras.
@echo off
echo. Lister lecteur fixe du PC
echo.
SETLOCAL ENABLEDELAYEDEXPANSION
for %%I in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
set Data=%%I:
set Lecteur=!Data:~0,2!
call :_Check_Drive
)
echo.
echo. Terminer
pause
exit
:_Check_Drive
fsutil fsinfo drivetype !Lecteur! | find "Lecteur fixe" >nul
rem Si tu veux de l'affichage...
rem if %errorlevel% equ 0 fsutil fsinfo drivetype !Lecteur! && call :_VolumeIsIntegre
rem Ici pas d'affichage.
if %errorlevel% equ 0 call :_VolumeIsIntegre
goto :EOF
:_VolumeIsIntegre
rem Vérifier si le volume est intègre.
rem La recherche ce fait sur le volume n'est pas intègre.
fsutil dirty query !Lecteur! | find "n'est pas" >nul
set /a Resultat=%errorlevel%
fsutil dirty query !Lecteur!
if !Resultat! equ 0 chkdsk !Lecteur! /F /R
goto :EOF
@echo off
echo. Lister lecteur fixe du PC
echo.
SETLOCAL ENABLEDELAYEDEXPANSION
for %%I in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
set Data=%%I:
set Lecteur=!Data:~0,2!
call :_Check_Drive
)
echo.
echo. Terminer
pause
exit
:_Check_Drive
fsutil fsinfo drivetype !Lecteur! | find "Lecteur fixe" >nul
rem Si tu veux de l'affichage...
rem if %errorlevel% equ 0 fsutil fsinfo drivetype !Lecteur! && call :_VolumeIsIntegre
rem Ici pas d'affichage.
if %errorlevel% equ 0 call :_VolumeIsIntegre
goto :EOF
:_VolumeIsIntegre
rem Vérifier si le volume est intègre.
rem La recherche ce fait sur le volume n'est pas intègre.
fsutil dirty query !Lecteur! | find "n'est pas" >nul
set /a Resultat=%errorlevel%
fsutil dirty query !Lecteur!
if !Resultat! equ 0 chkdsk !Lecteur! /F /R
goto :EOF
@Pierrot6150,
Je ne sais comment te remercier. Tout est comme je voulais et ça fonctionne sous XP et 7.
En tout cas, chapeau ! Je trouve ce batch brillantissime.
Bon week-end et au plaisir,
Bernard
Je ne sais comment te remercier. Tout est comme je voulais et ça fonctionne sous XP et 7.
En tout cas, chapeau ! Je trouve ce batch brillantissime.
Bon week-end et au plaisir,
Bernard
bricomachin
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
134
15 juil. 2012 à 18:42
15 juil. 2012 à 18:42
Salut,
Essaye ces 4 possibilités sur xp et poste les résultats stp on pourra analyser ce qui se passe :
1:
Je pense que lorsque ce sera fait on aura une meilleure vision de se qui se passe avec la commande sur xp. Je me souviens que j'avais eu le problème sur xp pour une liste de films à trier mais comme j'ai passé sur 7 j'ai simplifié le prog en utilisant les fonctions 7 donc je n'ai plus le prog de base. Je vais essayer de me souvenir... :p
@+
Bricomachin
Essaye ces 4 possibilités sur xp et poste les résultats stp on pourra analyser ce qui se passe :
1:
for /f "tokens=2, * delims= " %%A in ('fsutil fsinfo drives') Do ( echo %%A %%B )2:
for /f "tokens=2, 3, 4,5,6,7,8,9 delims= " %%A in ('fsutil fsinfo drives') Do ( echo %%A %%B )3:
for /f "tokens=2,7 delims= " %%A in ('fsutil fsinfo drives') Do ( echo a:%%A b:%%B g:%%G )4:
for /f "tokens=2, 3, 4,5,6,7,8,9 delims= " %%A in ('fsutil fsinfo drives') Do ( echo b:%%B )
Je pense que lorsque ce sera fait on aura une meilleure vision de se qui se passe avec la commande sur xp. Je me souviens que j'avais eu le problème sur xp pour une liste de films à trier mais comme j'ai passé sur 7 j'ai simplifié le prog en utilisant les fonctions 7 donc je n'ai plus le prog de base. Je vais essayer de me souvenir... :p
@+
Bricomachin