【问题标题】:Normalize file path in batch批量标准化文件路径
【发布时间】:2018-07-23 15:53:15
【问题描述】:

有没有办法从绝对文件路径批量解析..?例如,下面的批处理脚本应该输出C:\Users\xyz\other\abc.txt

REM Project dir is an absolute path, for example, C:\Users\xyz\project\
SET projectDir=%~1

REM Target file is a path relative to the project dir, for example, ..\other\abc.txt
SET target=%~2

REM Concatenate paths. This becomes C:\Users\xyz\project\..\other\abc.txt
SET absoluteTarget=%projectDir%%target%
SET absoluteTargetClean=...
echo %absoluteTargetClean%

absoluteTarget 变量引用现有文件。

我需要相同的目录而不是文件。你能用同样的方法来实现吗?

【问题讨论】:

  • 这不是我所说的绝对路径,而是相对路径!我想您应该澄清最终用户系统上是否存在给定的文件路径。 (如果不是,即只是一个字符串,答案可能完全不同!)
  • @Compo 我认为相对路径和绝对路径之间的区别如下:相对路径从工作目录开始,绝对路径从文件系统根目录开始。我的路径是绝对的,因为它以C: 开头。我认为你的意思是所谓的规范化路径
  • 您所要做的就是在您给出的示例中从路径中删除“\project\..”?
  • 我建议使用 %~1%~2 来删除最终包围的引号(需要引号以提供带有空格作为 one 参数的路径或文件名)。跨度>

标签: windows batch-file


【解决方案1】:

我想知道,怎么会有人想出像 C:\Users\xyz\project\..\other\abc.txt 这样的路径,但我们开始吧:

SET "absPath=C:\Users\xyz\project\..\other\abc.txt"
for %%i in ("%absPath%") do SET "absPathClean=%%~fi"
echo %absPathClean%

适用于文件和文件夹。

欲了解更多信息,请咨询for /?

【讨论】:

  • 我编辑了问题并补充说路径是从命令行参数构建的。
  • 谢谢,这适用于我的问题中的示例值。相对路径有类似的方法吗?例如,路径data\..\..\other\abc.txt 应转换为..\other\abc.txt
  • 不,这总是会生成你所说的“规范化路径”
猜你喜欢
  • 2017-10-21
  • 2017-03-03
  • 1970-01-01
  • 2018-04-09
  • 2022-01-21
  • 2018-06-05
  • 1970-01-01
  • 2020-04-26
相关资源
最近更新 更多