0
votes

Convertir le chemin Windows en unix convivial

matin,

J'ai besoin de convertir le chemin Windows dans le fichier .bat à Linux sympathique, par ex. de c: \ users \ luga code> à / c / utilisateurs / luga code> p>

seul moyen que j'ai trouvé jusqu'à présent est: p>

set profile_new=%UserProfile:\=/%
set profile_new=%profile_new::=%
set profile_new=/%profile_new%


6 commentaires

Il n'y a que 26 lettres; Vous ne pouvez pas simplement faire un remplacement pour chacun d'entre eux manuellement? Remplacer a: avec / a , b: avec / b , etc.


Eh bien, je suppose que je peux, mais ce n'est pas une belle solution et s'il y a mieux, j'aimerais savoir.


Ce site ne pouvait pas vraiment répondre à ce qui peut être meilleur ou pour ne pas être meilleur pour vous et que des questions demandant des réponses basées sur des opinions sont hors tension ici. Si quelque chose fait le travail, c'est bien, si vous souhaitez le rendre plus court, plus efficace ou «intelligent», alors une fois que vous avez un script de travail, vous pouvez le poster sur REVUE CODE pour ce type de conseil.


Eh bien, vous pourriez faire quelque chose comme ça, bien que vous ayez encore à afficher toutes les lettres: pour %% l dans (ABCDEFGHIJKLMNOPQRSTU VWXYZ) Do (ABCDEFGHIJKLMNOPQRSTU VWXYZ) Do (ABCDEFGHIJKLMNOPQRSTU VWXYZ) Do (ABCDEFGHIJKLMNOPQRSTU VWXYZ) Do (ABCDEFGHIJKLMNOPQRSTU VWXYZ) DO (ABCDEFGHIJKLMNOPQRSTU VWXYZ) Do (ABCDEFGHIJKLMNOPQRSTU VWXYZ) DO SET "Profil_New = %% Profile_New: %% L: = %% l% % " (cela ne gère pas le remplacement \ ni ne précède le / ). En boucle à travers les lettres de leur ASCII, par exemple, ce n'est pas si facile dans les scripts par lots et bien plus lentement que cette approche ...


Un problème avec toute cette question semble être négligé. Ce que Cygwin n'est pas ce que Mingw64 n'est pas ce que fait WSL. Il n'existe pas de mappage entre Windows et Chemins Unix. Cela dépend du système. Cela dépend de la manière dont le système de fichiers Windows est monté. WSL = / MNT / C / Utilisateurs MINGW64 = / C / Utilisateurs, etc. Je suppose que vous utilisez Cygwin ou Mingw64 ..


@Luga, vous avez donc pensé qu'il y avait une solution plus agréable, mais vous avez choisi d'enregistrer des déclarations sur le code HARDCODE 26. Moi et Aschipfl chacun vous a donné une solution plus agréable.


3 Réponses :


0
votes

Le boîtier supérieur et inférieur a été discuté plusieurs fois sur Stackoverflow. Une recherche simple vous trouverait une pléthore d'options.

Voici une solution possible pour vous. P>

@echo off
FOR /F "TOKENS=1,2 DELIMS=:" %%G IN ("%UserProfile:\=/%") DO (
    set "drive=%%G"
    set "upath=%%H"
)
CALL :toLower drive
set profile_new=/%drive%%upath%
echo %profile_new%
pause
GOTO :EOF

:toLower str -- converts uppercase character to lowercase
::           -- str [in,out] - valref of string variable to be converted
:$created 20060101 :$changed 20080219 :$categories StringManipulation
:$source https://www.dostips.com
if not defined %~1 EXIT /b
for %%a in ("A=a" "B=b" "C=c" "D=d" "E=e" "F=f" "G=g" "H=h" "I=i"
            "J=j" "K=k" "L=l" "M=m" "N=n" "O=o" "P=p" "Q=q" "R=r"
            "S=s" "T=t" "U=u" "V=v" "W=w" "X=x" "Y=y" "Z=z" "Ä=ä"
            "Ö=ö" "Ü=ü") do (
    call set %~1=%%%~1:%%~a%%
)
EXIT /b


4 commentaires

Les lettres avec des UMLAUT sont-elles autorisées comme lettres d'entraînement?


Merci - j'ai trouvé des solutions de boîtier supérieur / inférieur, mais n'a pas été capable de les adapter avec succès à mon script car je ne suis pas trop compétent dans la rédaction de fichiers par lots.


@Luga, alors ils auraient dû faire partie de votre question. Veuillez prendre le Tour . Veuillez lire, Comment poser une bonne question? . Veuillez également lire Comment créer un exemple minimal, complet et vérifiable


Désolé, fera mieux la prochaine fois.



1
votes

Il y a bien des utilitaires sur la plupart des environnements Windows qui fonctionnent bien. Le faire à la main est au mieux au mieux quand il y a de meilleurs moyens de résoudre le problème.

Si vous utilisez Cygwin ou Mingw, utilisez l'utilitaire CYGPATH .

Si vous utilisez WSL, utilisez wslpath .

Si vous utilisez autre chose, où les chemins sont montés, vous ferez différer cette convertissation. Je suis sûr que si vous montriez une part de samba, il ne serait pas in / c /

Si vous avez besoin d'aide pour les utiliser, veuillez vous reporter à Squashman Squashman ci-dessous sur la tournée et la procédure à suivre.

bonne chance.


0 commentaires

2
votes

Je voudrais probablement exploiter à partir d'un Fichier de lots Pour ce faire: xxx pré>

évidemment, dans ce cas, la variable % $ US UserProfile% code> strud> conserve la valeur requise. P>


Alternativement, un basé sur idée: p>
For /F "Tokens=1*Delims=:" %%A In ('WMIC FSDir Where^
 "Name='%UserProfile:\=\\%'" Get Name /Value 2^>Nul')Do Set "$%%A%%B" 2>Nul
Set "$Name=/%$Name:\=/%"


0 commentaires