Variable .Bat ne conserve que la dernière ligne d'un fichier txt
Fermé
Patrickdusud_0856
Messages postés
40
Date d'inscription
samedi 2 mai 2020
Statut
Membre
Dernière intervention
24 mai 2022
-
16 nov. 2021 à 01:45
brucine Messages postés 18384 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 décembre 2024 - 17 nov. 2021 à 11:19
brucine Messages postés 18384 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 28 décembre 2024 - 17 nov. 2021 à 11:19
A voir également:
- Variable .Bat ne conserve que la dernière ligne d'un fichier txt
- Fichier bat - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Aller à la ligne excel - Guide
3 réponses
jordane45
Messages postés
38358
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 décembre 2024
4 719
16 nov. 2021 à 06:45
16 nov. 2021 à 06:45
Bonjour
Essaye avec >> au lieu d'un seul >
Essaye avec >> au lieu d'un seul >
barnabe0057
Messages postés
14454
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
30 novembre 2024
4 918
Modifié le 16 nov. 2021 à 06:50
Modifié le 16 nov. 2021 à 06:50
Bonjour,
Pas besoin de fichier texte, voilà un exemple :
Si tu as des questions/remarques n'hésite pas.
Pas besoin de fichier texte, voilà un exemple :
FOR /F "skip=1 delims=" %%A in ('wmic diskdrive get serialnumber ^| findstr .') DO SET "var=%%A" ECHO %var% pause echo %var% | findstr "123" >nul && GOTO :Depart || GOTO :Erreur :Depart echo Bon numéro pause :Erreur echo Erreur de numéro pause
Si tu as des questions/remarques n'hésite pas.
brucine
Messages postés
18384
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
28 décembre 2024
2 729
16 nov. 2021 à 08:09
16 nov. 2021 à 08:09
Bonjour,
Si l'on veut électivement obtenir le numéro de série d'un seul des disques, il y a des contournements, par exemple concernant le premier disque:
wmic path win32_diskdrive where deviceid='\\\\.\\PHYSICALDRIVE0' get serialnumber
Si l'on veut électivement obtenir le numéro de série d'un seul des disques, il y a des contournements, par exemple concernant le premier disque:
wmic path win32_diskdrive where deviceid='\\\\.\\PHYSICALDRIVE0' get serialnumber
Patrickdusud_0856
Messages postés
40
Date d'inscription
samedi 2 mai 2020
Statut
Membre
Dernière intervention
24 mai 2022
2
16 nov. 2021 à 12:19
16 nov. 2021 à 12:19
Bonjour Bernabé, merci pour ta réponse, le code enregistre uniquement la dernière ligne dans la variable :
Je souhaiterai enregistrer toutes les lignes pour les comparer à la fin. Mais merci, car le fait de ne pas créer un fichier texte est une meilleure alternative tout de même.
Il faudrait soit créer une variable par ligne et les comparer en même temps par la suite, soit arriver à faire rentrer tout le résultat dans la même variable.
Concernant le fait de sélectionner un disque, cela n'est pas possible, car les résultats sont susceptibles de varié d'un PC à l'autre, j'aurais besoin de récupérer tous les numéros de série.
D:\>FOR /F "skip=1 delims=" %A in ('wmic diskdrive get serialnumber | findstr .') DO SET "var=%A"
" \>SET "var=ACE4_2E00_9537_B638.
" \>SET "var=0101d18be0e9c7afa7cb
D:\>ECHO 0101d18be0e9c7afa7cb
0101d18be0e9c7afa7cb
D:\>pause
Presione una tecla para continuar . . .
Je souhaiterai enregistrer toutes les lignes pour les comparer à la fin. Mais merci, car le fait de ne pas créer un fichier texte est une meilleure alternative tout de même.
Il faudrait soit créer une variable par ligne et les comparer en même temps par la suite, soit arriver à faire rentrer tout le résultat dans la même variable.
Concernant le fait de sélectionner un disque, cela n'est pas possible, car les résultats sont susceptibles de varié d'un PC à l'autre, j'aurais besoin de récupérer tous les numéros de série.
brucine
Messages postés
18384
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
28 décembre 2024
2 729
>
Patrickdusud_0856
Messages postés
40
Date d'inscription
samedi 2 mai 2020
Statut
Membre
Dernière intervention
24 mai 2022
16 nov. 2021 à 13:15
16 nov. 2021 à 13:15
Bonjour,
Si je veux isoler chaque variable, je dois passer par l'extension avec quelque chose de ce type (j'ai utilisé volumeserialnumber parce que je n'ai qu'un disque):
Les variables sont doublées parce que c'est un batch: à la place de ECHO, je redirige maintenant la variable séparément où je veux (texte, commande...) à chaque itération.
Si je veux isoler chaque variable, je dois passer par l'extension avec quelque chose de ce type (j'ai utilisé volumeserialnumber parce que je n'ai qu'un disque):
SETLOCAL ENABLEDELAYEDEXPANSION
SET Serial=
FOR /F "skip=1 tokens=1,2,3 delims=: " %%a in ('wmic logicaldisk where drivetype^=3 get name^,volumename^,volumeserialnumber^| findstr /v /r "^$"') DO (
SET "Serial=%%c"
ECHO !Serial!
)
Les variables sont doublées parce que c'est un batch: à la place de ECHO, je redirige maintenant la variable séparément où je veux (texte, commande...) à chaque itération.
barnabe0057
>
Patrickdusud_0856
Messages postés
40
Date d'inscription
samedi 2 mai 2020
Statut
Membre
Dernière intervention
24 mai 2022
Modifié le 16 nov. 2021 à 13:38
Modifié le 16 nov. 2021 à 13:38
A tester dans un fichier .bat, pas dans la console :
setlocal enabledelayedexpansion FOR /F "skip=1 delims=" %%A in ('wmic diskdrive get serialnumber ^| findstr .') DO ( echo %%A | findstr "123" >nul && set match=1 ) if !match! equ 1 (goto :Depart) else (goto :Erreur) :Depart echo Bon numéro pause :Erreur echo Erreur de numéro pause
Patrickdusud_0856
Messages postés
40
Date d'inscription
samedi 2 mai 2020
Statut
Membre
Dernière intervention
24 mai 2022
2
17 nov. 2021 à 10:48
17 nov. 2021 à 10:48
Merci pour vos réponses trés rapide. Barnabe0057, votre code fonctionne parfaitement.
Cependant, je ne comprends pas toutes les fonctions à l'intérieur de la boucle. Pourriez-vous m'expliquer le code, je vous en serais très reconnaissant. Ceci me permettra de résoudre par moi-même un problème similaire dans le futur
Merci encore à tous pour votre aide.
Cependant, je ne comprends pas toutes les fonctions à l'intérieur de la boucle. Pourriez-vous m'expliquer le code, je vous en serais très reconnaissant. Ceci me permettra de résoudre par moi-même un problème similaire dans le futur
Merci encore à tous pour votre aide.
brucine
Messages postés
18384
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
28 décembre 2024
2 729
17 nov. 2021 à 11:19
17 nov. 2021 à 11:19
Bonjour,
-Pour qu'une variable soit testée à chaque itération (et pas seulement la dernière)
on doit préciser setlocal enabledelayedexpansion et exprimer la variable comme !match! et non pas %match%
-Pour chercher des caractères dans la sentence wmic, on doit la rediriger vers findstr, mais le caractère de redirection (pipe |) est mal lu à la ligne de commande et on doit donc "l'échapper" par ^; le point . est un joker prescrivant de rechercher tous les caractères, et skip=1 prescrit de ne pas faire la recherche dans la première ligne des résultats wmic (titres).
-sur le même principe, à la deuxième ligne, si la variable contient les caractères "123" (c'est textuel, entre guillemets), on en redirige le résultat de manière qu'il ne soit jamais lu (redirection >nul) et le paramètre && n'exécute la deuxième commande (attribuer à la variable match la valeur 1) que si la première condition (existence des caractères 123) est remplie.
Enfin, certaines fonctions ou commandes exécutées dans une boucle nécessitent d'être spécifiées non pas entre guillemets, comme le veut l'usage général, mais entre apostrophes, c'est le cas de wmic.
Il suffit ensuite de tester la valeur de match.
-Pour qu'une variable soit testée à chaque itération (et pas seulement la dernière)
on doit préciser setlocal enabledelayedexpansion et exprimer la variable comme !match! et non pas %match%
-Pour chercher des caractères dans la sentence wmic, on doit la rediriger vers findstr, mais le caractère de redirection (pipe |) est mal lu à la ligne de commande et on doit donc "l'échapper" par ^; le point . est un joker prescrivant de rechercher tous les caractères, et skip=1 prescrit de ne pas faire la recherche dans la première ligne des résultats wmic (titres).
-sur le même principe, à la deuxième ligne, si la variable contient les caractères "123" (c'est textuel, entre guillemets), on en redirige le résultat de manière qu'il ne soit jamais lu (redirection >nul) et le paramètre && n'exécute la deuxième commande (attribuer à la variable match la valeur 1) que si la première condition (existence des caractères 123) est remplie.
Enfin, certaines fonctions ou commandes exécutées dans une boucle nécessitent d'être spécifiées non pas entre guillemets, comme le veut l'usage général, mais entre apostrophes, c'est le cas de wmic.
Il suffit ensuite de tester la valeur de match.
16 nov. 2021 à 12:12