批处理脚本:使用 wslpath 将路径转换为 linux 格式
Batch script: Convert path to linux format using wslpath
我试图使用 wsl wslpath
将 .bat 脚本的当前工作目录转换为 linux 格式。向您展示它适用于 CMD:
但是,当我把它放在.bat 文件中,并将%cd%
更改为%~dp0
时,路径是空的:
test.bat
包含:
FOR /F %%i IN ('wsl wslpath -a %~dp0') DO set lp=%%i
echo %lp%
知道为什么吗?
试试这个:
echo "%cd%" -- "%~dp0"
%cd%
returns 没有结束反斜杠的路径。所以你可以添加第二个变量来清除它。
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%
)
)
我试图使用 wsl wslpath
将 .bat 脚本的当前工作目录转换为 linux 格式。向您展示它适用于 CMD:
但是,当我把它放在.bat 文件中,并将%cd%
更改为%~dp0
时,路径是空的:
test.bat
包含:
FOR /F %%i IN ('wsl wslpath -a %~dp0') DO set lp=%%i
echo %lp%
知道为什么吗?
试试这个:
echo "%cd%" -- "%~dp0"
%cd%
returns 没有结束反斜杠的路径。所以你可以添加第二个变量来清除它。
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%
)
)