如何解析相对路径和/或文件名中的绝对路径?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (24)

Windows批处理脚本中是否存在从包含文件名和/或相对路径的值返回绝对路径的方法?

假设:

"..\"
"..\somefile.txt"

我需要相对于批处理文件的绝对路径。

例子:

  • “Somefile.txt”位于“C:\foo”中
  • “test.bat”位于“C:\foo\Bar”中。
  • 用户在“C:\foo”中打开命令窗口并调用Bar\test.bat ..\somefile.txt
  • 在批处理文件“C:\foo\Somefile.txt”中,将从%1
提问于
用户回答回答于

下面是一个示例,演示这些技术中的每一种:

@echo off
echo %%~dp0 is "%~dp0"
echo %%0 is "%0"
echo %%~dpnx0 is "%~dpnx0"
echo %%~f1 is "%~f1"
echo %%~dp0%%~1 is "%~dp0%~1"

rem Temporarily change the current working directory, to retrieve a full path 
rem   to the first parameter
pushd .
cd %~dp0
echo batch-relative %%~f1 is "%~f1"
popd

如果您将其保存为c:\temp\example.bat,并从c:\user\public作为

C:\user\public>\temp\example.bat.\windows

你将观察到以下输出:

%~dp0 is "C:\temp\"
%0 is "\temp\example.bat"
%~dpnx0 is "C:\temp\example.bat"
%~f1 is "C:\Users\windows"
%~dp0%~1 is "C:\temp\..\windows"
batch-relative %~f1 is "C:\Windows"
用户回答回答于

如何将相对路径转换为Windows命令脚本中的绝对路径。

@echo off

set REL_PATH=..\..\
set ABS_PATH=

rem // Save current directory and change to target directory
pushd %REL_PATH%

rem // Save value of CD variable (current directory)
set ABS_PATH=%CD%

rem // Restore original directory
popd

echo Relative path: %REL_PATH%
echo Maps to path: %ABS_PATH%

扫码关注云+社区