Définir variable comprise dans %computername%
Ferméadgm1 Messages postés 275 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 11 novembre 2024 - 20 oct. 2023 à 18:54
- Définir variable comprise dans %computername%
- Définir google comme page d'accueil - Guide
- Variable objet ou variable de bloc with non définie - Forum VB / VBA
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp ✓ - Forum Word
- Faites afficher avec un fond coloré les cellules qui contiennent une valeur comprise entre 250 et 350. quel nombre est dessiné en surbrillance ? ✓ - Forum Excel
6 réponses
16 oct. 2023 à 06:23
Bonjour
Il faut que tu extraits le texte qui se situe avant le tiret.
Par exemple
for /f "tokens=1 delims=-" %%a in ("%computername%") do ( echo %%a )
16 oct. 2023 à 00:41
pour préciser. C'est à la ligne 20 que je cherche ma formule.
J'ai testé ça qui me prend les 3 premiers caractere sauf que ca marche pas pour 100% des cas. il y a des salles qui ont plus de 3 caracteres comme B310 ou A310i.
SET "room=%computername:~0,3%"
16 oct. 2023 à 07:27
Bonjour,
Pendant que je passe par là, tu n'as pas donné l'écho pour ton histoire de CSV, ça fonctionne comme tu veux?
20 oct. 2023 à 01:47
oui ca marche en partie merci. Je vais commenter dans le post en question
16 oct. 2023 à 07:58
Jordane45 a raison; si tu ne veux pas ou ne peux pas passer par une boucle FOR pour une raison ou une autre, l'alternative par SET consiste à couper tout ce qu'il y a après le premier tiret:
set room=%computername:-="&:"%"
20 oct. 2023 à 01:45
merci pour l'astuce jordane j'avais en effet deja trouvé avec la boucle for mais pas tres commode je trouve car il faut remettre une commande chcp:
chcp 65001 >NUL set poste=%computername% for /f "tokens=1 delims=-" %%a in ("%poste%") do set room=%%a
Avec la proposition de brucine ca va nikel, par contre il y avait une erreur des guillemets en trop, ca donne ça :
set room=%computername:-=&:"%"
J'ai un autre soucis si qqun peut m'aiguiller. Dans l'idée je souhaite rediriger le script vers :INSTALL_SOLO si ce n'est pas un poste parmis la liste que je prédéfini à la ligne 4. Mais dans l'état actuel mon script ne marche que pour les pc de la liste et ne va pas appliquer pour tous les autres postes la série de commande "INSTALL_SOLO
Ou est l'erreur dans la ligne ci dessous?
echo.%computername%|findstr /i "A01-PROF A13-W10-PROF A14-PROF A15-PROF A310i-BB-PROF A310v-PROF A33-PROF A35-PROF" >nul 2>&1 && goto INSTALL_PROF_INFO || goto INSTALL_SOLO
20 oct. 2023 à 10:44
Bonjour,
Dans un cas comme dans l'autre CHCP 65001 n'est pertinent que s'il existe dans les variables des caractères spéciaux.
Le bug est double:
-FINDSTR est rapporté ne pas être fiable en recherche multi-critères si les critères de recherche n'ont pas la même longueur.
-De toute façon, ta syntaxe repose sur une erreur de la commande FINDSTR qui n'existe pas: elle est de toute façon effectuée avec succès et se contente de rendre selon le cas ERRORLEVEL 0 ou 1, on ne peut donc pas piper sa réussite ou son échec par || ou &&.
Supposons que j'aie créé une liste des noms d'ordinateurs prof.txt correspondant à ta liste FINDSTR; je décide que le nom d'ordinateur recherché est name puisque je ne peux bien sûr pas tester en temps réel sur mon nom d'ordinateur:
set name=A01-PROF findstr /i %name% prof.txt >nul if %errorlevel% equ 0 goto INSTALL_PROF_INFO goto INSTALL_SOLO :INSTALL_PROF_INFO set room=%name:-=&:"%"
A l'idéal on devrait non pas faire une liste prof.txt mais une liste salle.txt (toutes) et y tester par une boucle si le nom "prof" apparaît dans le nom de salle ou, si ce n'est pas toujours le cas, l'opposer à la liste prof.txt: on ne va pas alors chercher un nom d'ordinateur en particulier mais tous et les traiter par une boucle conditionnelle sur le nom prof ou la présence dans cette liste.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question20 oct. 2023 à 12:49
ok je vois en gros l'erreur du findstring
Mais il n'ya pas moyen d'indiquer dans le script lui même les noms de PC qui doivent installer A (:INSTALL_PROF_INFO) et de convenir par logique que tout le reste doit installer B (:INSTALL_SOLO)
En fait je souhaiterais faire la commande suivante :
Si le poste s'appelle XX-PROF, YY-PROF,.... alors rediriger vers l'installation A et dans tous les autres cas rediriger vers B
Si je comprend bien ta proposition il faudrait que je créé un fichier .txt avec tous mes postes qui doivent pointer vers l'installation A. Puis j'indique que si il trouve une valeur comprise dans le .txt alors il installe A et sinon il installe B. C'est bien ça? Mais dans ce cas à quoi sert en début de script la ligne set name=A01-prof? puisque selon le poste qui lit le script il peut avoir différents noms.
20 oct. 2023 à 13:46
J'ai pris comme je t'ai exposé la ligne 1 au lieu de %computername% parce que le mien ne contient pas XX-PROF, la liste texte ne fait que se substituer à ta ligne FINDSTR.
Si tu utilises %computername% comme étant le nom réel d'un des PC, l'installation sera A ou B selon son type.
Je n'ai d'ailleurs même pas besoin de m'embêter s'ils s'appellent tous XX-PROF
J'écris set name=%computername:~-4% et je teste si name vaut "PROF".
Pour automatiser la chose sans entrer à la main le nom du poste cible (et assumant que NetBios est activé sur le réseau), il faut sans doute à moins d'une commande spécifique lister via NET VIEW puis isoler dans la sortie chaque nom,
\\BRUCINE10 blabla donnera BRUCINE10 en supprimant par SET les 2 premiers caractères et en ne prenant que le premier "token" (le deuxième, blabla, étant le nom de description s'il existe).
20 oct. 2023 à 14:05
Pour un seul, comme ça (pour plusieurs, je dois comme d'habitude utiliser l'expansion de la variable ou placer le traitement à partir de la réduction du nom de la variable dans une sous-routine CALL):
for /f %%a in ('net view ^| findstr /b \\') do ( set name=%%a ) set "name=%name:~2%" echo %name% pause
20 oct. 2023 à 14:24
J'ai essayé ça
set name=%computername% findstr /i %name% "\\srv-dc1\appli$\veyon\pc_prof_info.txt" >nul if %errorlevel% equ 0 goto INSTALL_PROF_INFO else goto INSTALL_SOLO
mais ca me met l'erreur
FINDSTR : Impossible d'ouvrir \\srv-dc1\appli$\veyon\pc_prof_info.txt
Dois y avoir encore une faite de saisie de mes comandes. Dans mon fichier .txt je dois mettre les noms de machines à la suite avec un espace c'est bien ça? ou un nom de machine par ligne?
20 oct. 2023 à 14:42
oups erreur de ma part sur le chemin d'accès au fichier .txt tout simplement. Une fois rectifié ça marche bien avec cette commande visiblement mais uniquement si le poste fait partie de la liste du fichier.txt. pour tous les autres cas il ne se passe rien.
20 oct. 2023 à 14:53
Si la liste positive est exécutée, c'est que errorlevel 0 est lu, et que donc s'il vaut 1 la condition alternative devrait l'être.
La syntaxe IF est souvent vicieuse, essayer et/ou inverser les conditions (IF NOT ou errorlevel 1) pour vérifier si le branchement se fait bien quitte à mettre n'importe quoi (echo "toto" et pause au début de INSTALL_SOLO)
IF ... ( goto... ) ELSE ( goto... )
20 oct. 2023 à 18:51
ok merci, en fait c'etait une autre commande qui mettait le bazar, une fois supprimé tout est rentré dans l'ordre. C'etait pour installer en plus PsTools sur le poste et il devait y avoir un conflit, j'ai juste déplacé mes commandes en haut du script pour éviter les pb. Donc ca marche bien avec les 2 methodes, soit comme j'avais fait dans mon 1er post :
echo.%computername%|findstr /i "A01-PROF A13-W10-PROF A14-PROF A15-PROF A310i-BB-PROF A310v-PROF A33-PROF A35-PROF" >nul 2>&1 && goto INSTALL_PROF_INFO || goto INSTALL_SOLO
soit à l'aide d'un fichier .txt qui peut etre pratique aussi dans certains cas
set name=%computername% findstr /i %name% "\\srv-dc1\applications$\veyon\pc_prof_info.txt" >nul if %errorlevel% equ 0 goto INSTALL_PROF_INFO else goto INSTALL_SOLO
20 oct. 2023 à 18:54
pour info le bout de script qui causait le bug :
if not exist "%windir%\system32\pstools\" xcopy /s "\\srv-dc1\applications$\veyon\pstools" "%windir%\system32\pstools\" /Y SET mypath=C:\windows\system32\pstools ECHO %Path%|findstr /i /c:"%mypath:"=%">nul || setx Path /m "%Path%";%mypath%