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

Vic*_*Dev 9 windows batch command-line

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

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

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

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

我想通过一些代码更改获得这些文件的绝对路径,如果可以在我的代码中使用全局变量,那么这对我来说是最好的,因为我不是 Windows 批处理脚本编写者。

Dav*_*ill 3

我没有获得@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
Run Code Online (Sandbox Code Playgroud)

笔记:

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

进一步阅读

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