Menu

Script de modification de lecteur reseau [Résolu]

Dakolva 6 Messages postés jeudi 11 mai 2017Date d'inscription 12 mai 2017 Dernière intervention - 11 mai 2017 à 17:16 - Dernière réponse : barnabe0057 11916 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 25 avril 2018 Dernière intervention
- 12 mai 2017 à 17:10
Bonjour,

Je cherche à créer un batch qui modifie les lecteurs réseaux mappés sur une machine en remplaçant l'adresse IP par le nom du serveur de partage.
Le tout en conservant la lettre de lecteur.

J'ai fait ça
NET USE | find /I "\\192.168.1.2">C:\temp\lecteursreseaux.txt
IF %errorlevel%==0 goto changement
goto fin
:changement
setlocal EnableDelayedExpansion
for /f "tokens=2" %%m in (C:\temp\lecteursreseaux.txt) do (
NET USE %%m /delete /yes
for /f "tokens=3 delims=\" %%a in ('TYPE C:\temp\lecteursreseaux.txt') do (
NET USE %%m "\\srv-data\%%a"
)
)


Cela fonctionne presque car il y a un espace à la fin du %%a qui fausse le chemin utilisé pour la commande NET USE.
Je ne parviens pas à supprimer cet espace qui doit déjà exister dans le fichier C:\temp\lecteursreseaux.txt je pense.
Quelqu'un peux m'aider ?
Afficher la suite 

11 réponses

Répondre au sujet
barnabe0057 11916 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 25 avril 2018 Dernière intervention - Modifié par barnabe0057 le 11/05/2017 à 17:55
0
Utile
Bonjour,

Essaie voir comme ça :

(NET USE | find /I "\\192.168.1.2") && (call :changement)
exit

:changement
for /f "tokens=2,4 delims=\ " %%M in ('net use ^| find /I "\\192.168.1.2"') do (
NET USE %%M /delete /yes
NET USE %%M \\srv-data\%%N
)
goto :eof
rem

Je me suis permis de simplifier le code, il était trop compliqué par rapport à la tâche à effectuer.

J'ai fusionné les deux boucles for, et j'ai utilisé la commande net use directement dans le for, au lieu de lire et d'écrire dans un fichier texte superflu.
Commenter la réponse de barnabe0057
Dakolva 6 Messages postés jeudi 11 mai 2017Date d'inscription 12 mai 2017 Dernière intervention - 11 mai 2017 à 18:02
0
Utile
1
Alors,
Merci ça à l'air de fonctionner à condition de prendre en compte les espaces dans le nom de répertoire récupéré dans la variable %%N.
Sinon le chemin réseau n'est pas trouvé
barnabe0057 11916 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 25 avril 2018 Dernière intervention - 11 mai 2017 à 18:05
Et si tu rajoutes des " " ?
NET USE %%M "\\srv-data\%%N"


edit : ne tiens pas compte de ce que j'ai marqué, je viens de comprendre le problème avec les espaces
Commenter la réponse de Dakolva
Dakolva 6 Messages postés jeudi 11 mai 2017Date d'inscription 12 mai 2017 Dernière intervention - 11 mai 2017 à 18:04
0
Utile
1
comment fait-on pour que %%N soit complet genre :
\\srv-data\"répertoire avec espace"
barnabe0057 11916 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 25 avril 2018 Dernière intervention - 11 mai 2017 à 18:11
Il faut rajouter un token :

(NET USE | find /I "\\192.168.1.2") && (call :changement)
exit

:changement
for /f "tokens=2,4,5 delims=\ " %%M in ('net use ^| find /I "\\192.168.1.2"') do (
NET USE %%M /delete /yes
NET USE %%M "\\srv-data\%%N %%O"
)
goto :eof
rem


Le problème c'est que si le nom de partage ne contient pas d'espace ça sera faux encore une fois.
Commenter la réponse de Dakolva
Dakolva 6 Messages postés jeudi 11 mai 2017Date d'inscription 12 mai 2017 Dernière intervention - 11 mai 2017 à 18:08
0
Utile
non c'est pas là apparemment qu'il faut les rajouter.
C'est lors de la détection de la chaîne de caractère qui conduit à renseigner la variable %%N qu'il faut tout récupérer
Commenter la réponse de Dakolva
Dakolva 6 Messages postés jeudi 11 mai 2017Date d'inscription 12 mai 2017 Dernière intervention - 11 mai 2017 à 18:12
0
Utile
1
si je fait un

for /f "tokens=2,4 delims=\ " %M in ('net use ^| find /I "\\192.168.1.2"') do echo %N

cela m'affiche "documents" au lieu de "documents entreprise"
barnabe0057 11916 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 25 avril 2018 Dernière intervention - 11 mai 2017 à 18:20
J'ai indiqué la solution dans mon message de 18h11
Commenter la réponse de Dakolva
barnabe0057 11916 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 25 avril 2018 Dernière intervention - 11 mai 2017 à 18:22
0
Utile
J'ai trouvé une solution pour gérer les noms avec et sans espace, dans la limite d'un seul espace par nom :

(NET USE | find /I "\\192.168.1.2") && (call :changement)
exit

:changement
for /f "tokens=2,4,5 delims=\ " %%M in ('net use ^| find /I "\\192.168.1.2"') do (
NET USE %%M /delete /yes
(NET USE %%M "\\srv-data\%%N %%O") || (NET USE %%M \\srv-data\%%N)
)
goto :eof
rem
Commenter la réponse de barnabe0057
Dakolva 6 Messages postés jeudi 11 mai 2017Date d'inscription 12 mai 2017 Dernière intervention - 12 mai 2017 à 16:56
0
Utile
1
merci beaucoup cela fonctionne.
barnabe0057 11916 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 25 avril 2018 Dernière intervention - 12 mai 2017 à 17:10
De rien.
Commenter la réponse de Dakolva