Пакетный скрипт: конвертировать путь в формат linux, используя wslpath - PullRequest
1 голос
/ 03 апреля 2020

Я пытался преобразовать текущий рабочий каталог скрипта .bat в формат linux, используя wsl wslpath. Чтобы показать вам, что он работает на CMD:

enter image description here

Однако, когда я положил его в файл .bat, и изменил %cd% на %~dp0 путь пуст: enter image description here

test.bat содержит:

FOR /F %%i IN ('wsl wslpath -a %~dp0') DO set lp=%%i
echo %lp%

Есть идеи почему?

1 Ответ

1 голос
/ 03 апреля 2020

Попробуйте:

echo "%cd%" -- "%~dp0"

%cd% возвращает путь без конца backsla sh. Таким образом, вы можете добавить вторую переменную, которая очищает ее.

set "scriptDir=%~dp0"
set "scriptDir=%scriptDir:~0,-1%"

UPDATE (только с подстановкой строк - используйте подпрограмму toLinuxPath)

@echo off

call ::toLinuxPath "%userprofile%\AppData\Local\Temp" tempF
echo %tempF%
exit /b 0

:toLinuxPath [returnVariable - the result will be stored in it; If omitted will be only echoed]
setlocal 

    set "_path=%~p1"
    set "name=%~nx1"
    set "drive=%~d1"

    set "rtrn=%~2"

    set "result=/mnt/%drive:~0,1%%_path:\=/%%name%"


endlocal & (
    if "%~2" neq "" (
        set "%rtrn%=%result%"
    ) else (
        echo %result%
    )
)
...