gpt4 book ai didi

windows - 从相对路径和/或文件名解析绝对路径

转载 作者:可可西里 更新时间:2023-11-01 11:52:29 26 4
gpt4 key购买 nike

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

给定:

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

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

示例:

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

最佳答案

在批处理文件中,就像在标准 C 程序中一样,参数 0 包含当前正在执行的脚本的路径。您可以使用 %~dp0 仅获取第 0 个参数(即当前脚本)的路径部分 - 此路径始终是完全限定路径。

您还可以使用 %~f1 获取第一个参数的完全限定路径,但这会根据当前工作目录给出路径,这显然不是您想要的。

就个人而言,我经常在我的批处理文件中使用 %~dp0%~1 习惯用法,它解释相对于执行批处理路径的第一个参数。但它确实有一个缺点:如果第一个参数是完全限定的,它就会惨败。

如果你需要同时支持相对绝对路径,你可以使用Frédéric Ménez's solution : 临时改变当前工作目录。

下面的示例将演示这些技术中的每一种:

@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:\Users\Public 运行它

c:\Users\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"

批处理参数允许的修饰符集的文档可以在这里找到: https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/call

关于windows - 从相对路径和/或文件名解析绝对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1645843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com