Évitez inutile SUBST / D lorsque vous réglez SUBST

1

Comment peut-on recoder

subst P: /D
subst P: D:\mydir

de sorte qu'une deuxième exécution ne supprime pas le lecteur inutilement, c'est-à-dire si le lecteur est déjà substitué à ce chemin?

La suppression momentanée du lecteur interfère avec une vue de l'explorateur que j'ai en train de regarder ce lecteur.

ChrisJJ
la source
Est-il possible que P: puisse être connecté à un autre chemin ou est-ce juste assez pour vérifier si P est connecté (à un chemin quelconque) et s'il n'est pas connecté à D: \ mydir ?? Ce dernier serait facile à faire avec un IF NOT EXIST P:\NUL subst P: D:\mydir
Rik
@Rik, merci d'avoir pensé mais j'ai besoin du contrôle complet. Quitter P: sur un chemin différent serait désastreux.
ChrisJJ

Réponses:

1

Ok, vous avez donc absolument besoin de vérifier que P: soit redirigé vers D: \ mydir

Vous pouvez le faire comme ceci (enregistrer en tant que fichier batch):

@echo off
subst | findstr /C:"P:\\: => D:\\MYDIR" 1> nul
if errorlevel 1 (
  echo. P-drive not mapped to D:\mydir
  echo. remapping P:\
  subst P: /D 1> nul
  subst P: D:\mydir
) else (
  echo. P-drive already mapped to D:\mydir
)

Il vérifie (avec commande subst et findstr ) si la P: est déjà associé à D:\mydir.
(veuillez noter le double \ dans le chèque avec findstr )
(notez aussi que subst renvoie toujours le chemin dans toutes en majuscules )

  • si P:\: => D:\MYDIR n'est pas présent dans subst alors nous devons remapper.
  • le subst P: /D 1> nul supprime le courant P:
    (et supprime tout message d'erreur au cas où P: n'a pas été cartographié)
  • Puis avec subst P: D:\mydir nous cartographions le lecteur
    (aucun message d'erreur ne devrait apparaître car nous venons de supprimer un P-mapping)
  • Vous pouvez supprimer les lignes d'écho si vous ne les voulez pas

S'il vous plaît vérifier votre sortie de subst pour voir si cela correspond au format que j'ai utilisé ici. Alors:
P:\: => D:\MYDIR
(sinon, veuillez ajuster le fichier de commandes en conséquence)

Modifier:
Voici une version révisée (et paramétrée). Vous pouvez l'appeler comme remap P: D:\mydir. La nouvelle version est sensible à la casse. Il ajoute le double \ au findstr paramètres. Il vérifie préalablement si le répertoire existe (il ne doit pas contenir de barre oblique finale).

@echo off
if "%2"=="" (
  echo. Call with: %0 drive: destination-direcory
  exit/b
)
if not exist "%2\." (
  echo. The destination directory does not exist
  exit/b
)
SET drive=%1\\
SET dest=%2
SET dest=%dest:\=\\%
subst | findstr /I /R /C:"^%drive%: => %dest%$" 1> nul
if errorlevel 1 (
  echo. %1-drive not mapped to %2
  echo. remapping %1
  subst %1 /D 1> nul
  subst %1 %2
) ELSE (
  echo. %1-drive already mapped to %2
)
Rik
la source
Merci. Oui, la sortie est la même ici. J'aurai besoin de cela comme sous-routine appelable avec les paramètres P: et D: \ mydir. Comment puis-je traduire D: \ mydir en D: \\ mydir?
ChrisJJ
@ChrisJJ J'ai modifié ma réponse avec un fichier de commandes paramétré. Il va ajouter le double \ pour vous. Vous pouvez l'utiliser comme remap p: d:\mydir. (C'est insensible à la casse maintenant.) Voir Edit dans ma réponse.
Rik