Конвертировать Windows путь в Unix дружественных - PullRequest
0 голосов
/ 13 марта 2019

Утро,

Мне нужно преобразовать путь Windows в файле .bat для Linux, например, из C:\Users\Luga в /c/Users/Luga

Единственный способ, который я нашел до сих пор:

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

, который работает, но я не знаю, как перевести заглавную букву в нижний регистр, что, к сожалению, необходимо (и я должен быть в состоянии сделать это для каждой возможной буквы).

Спасибо за любой совет

редактировать: он нужен мне для работы томов докера - запуск сценария .bat на компьютере, на котором есть только панель инструментов докера.

Использовал решение aaaaaa123456789 в комментариях.

Ответы [ 3 ]

1 голос
/ 13 марта 2019

Действительно, на большинстве * nix в Windows есть утилиты, которые работают хорошо.Делать это от руки в лучшем случае отрывочно, когда есть лучшие способы решения проблемы.

Если вы используете CYGWIN или MINGW, используйте утилиту cygpath .

Есливы используете WSL, используйте wslpath .

Если вы используете что-либо еще, пути, которые смонтированы, будут отличаться, что делает этот разговор спорным.Я уверен, что если бы вы монтировали общий ресурс samba, его не было бы в / c /

Если вам нужна помощь в их использовании, обратитесь к комментарию Squashman ниже о туреи как.

Удачи.

1 голос
/ 13 марта 2019

Я бы, вероятно, использовал из , чтобы сделать это:

For /F "Delims=" %%A In ('
    PowerShell -NoP "$Env:UserProfile.Replace('\','/').Replace(':','').ToLower()"Replace(':','')).ToLower()"
')Do Set "$UserProfile=/%%A"

Очевидно, что в этом случае переменная %$UserProfile% будет содержать требуемое значение.


В качестве альтернативы, на основе идея:

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:\=/%"

В этом случае переменная %$Name% будет содержать требуемое значение.

0 голосов
/ 13 марта 2019

Верхний и нижний кожух обсуждался несколько раз на StackOverflow.Простой поиск найдет вам множество вариантов.

Вот одно из возможных решений для вас.

@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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...