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


9

我有以下脚本来从目录中递归列出具有.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批处理脚本编写者。

Answers:


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

笔记:

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

进一步阅读

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.