在Windows批处理脚本中获取绝对路径的变量

在Windows批处理脚本中获取绝对路径的变量

我有以下脚本来从目录中递归列出所有具有.phtml扩展名的文件。

@echo off
setlocal
for /f %%G in ('forfiles /s /m *.phtml /c "cmd /c echo @relpath"') do echo %%G >> listoffiles.txt
endlocal
exit

它仅列出文件的相对路径。上面的脚本从中间位置运行,因此我没有在@relpath变量中获得完整路径。

另外,我在结果行中看到了引号,我想将其删除。

我想通过尽可能少的代码更改来获取这些文件的绝对路径,如果有可用的全局变量可以在我的代码中使用,那么这对我来说是最好的,因为我不太熟悉 Windows 批处理脚本。

答案1

我没有获得@relpath变量中的完整路径。

另外,我在结果行中看到了引号,我想将其删除。

以下批处理文件可以完成您想要的操作:

@echo off
setlocal enableDelayedExpansion
for /f %%G in ('forfiles /s /m *.phtml /c "cmd /c echo @path"') do (
  set _name=%%G
  rem strip the quotes
  echo !_name:~1,-1! >> listoffiles.txt
  )
endlocal
exit

笔记:

  • 使用@path(文件的完整路径)而不是@relpath(文件的相对路径)。
  • 使用变量substring表达式删除引号(:~1,-1从变量字符串中删除第一个和最后一个字符)。
  • 使用setlocal EnableDelayedExpansion以便在for循环中正确更新变量。

进一步阅读

  • Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
  • 启用延迟扩展- 延迟扩展将导致变量在执行时而不是在解析时扩展。
  • 对于/f- 循环命令以执行另一个命令的结果。
  • 福尔菲斯- 选择一个文件(或一组文件)并对每个文件执行一个命令。批处理。
  • 变量- 提取变量的一部分(子字符串)。

相关内容