2016-05-17 1 views
2

J'ai un problème avec la variable% CD% dans un fichier batch. Il ajoute une barre oblique inverse si le script est exécuté à partir de la racine d'un lecteur.variable de fichier batch% CD% ajout d'une barre oblique inverse lors de l'exécution à partir de la racine du lecteur

comme exemple: updatedir =%% CD \ Update & echo% updatedir% retournera quelque chose comme

  • d'un dossier E: \ Nouveau dossier \ Update
  • De une racine de lecteur E: \\ Mise à jour

Y at-il un wa y pour se débarrasser de la barre oblique inverse supplémentaire si elle est exécutée à partir de la racine?

+1

Bien que cosmétiquement terribles, l'antislash ne sait pas nuire ... – aschipfl

+0

@aschipfl je n'ai pas, mais je viens confirmé. Bon à savoir ... –

Répondre

1

Vous pouvez faire quelque chose comme ceci:

set "CurrentDir=%CD%" 
if "%CD:~-1%"=="\" set "CurrentDir=%CD:~0,-1%" 

Puisque vous ne voulez pas aller changer la variable système %CD%, cela crée une nouvelle variable %CurrentDir% à la valeur actuelle de %CD%. Ensuite, il vérifie si le dernier caractère de %CD% est \, et s'il l'est, définit %CurrentDir% à la valeur %CD%, moins le dernier caractère.

This question/answer a plus d'informations sur l'utilisation des sous-chaînes dans les fichiers batch.

3

Oui %CD% a seulement un \ de fin si le répertoire en cours est la racine. Vous pouvez vous débarrasser de toute barre oblique inverse qui pourrait être là. Mais il y a une solution plus simple.

Utilisez à la place le %__CD__% non documenté, auquel ajoute toujours la barre oblique inverse. Cela facilite la création d'un chemin propre, quel que soit le répertoire en cours.

set "updatedir=%__CD__%Update 
+0

Holy cow! Comment tu sais ça? Si ce n'est pas dans la documentation _official_, est-ce au moins documenté _quelque part_? (Je vois que cela fonctionne, mais pouvez-vous également pointer vers une source?) –

+1

@WesLarson - Je pense avoir vu '% __ CD __% 'pour la première fois sur un post DosTips par jeb, mais je ne me souviens plus du sujet. Il existe une documentation non officielle sur http://ss64.com/nt/syntax-variables.html. Vous pouvez être intéressé par http://stackoverflow.com/q/20156490/1012053. – dbenham

2

remplacer tous les \\ avec occurence de \.

echo %updatedir:\\=\%