![在Windows批处理脚本中获取绝对路径的变量](https://linux22.com/image/1477406/%E5%9C%A8Windows%E6%89%B9%E5%A4%84%E7%90%86%E8%84%9A%E6%9C%AC%E4%B8%AD%E8%8E%B7%E5%8F%96%E7%BB%9D%E5%AF%B9%E8%B7%AF%E5%BE%84%E7%9A%84%E5%8F%98%E9%87%8F.png)
我有以下脚本来从目录中递归列出所有具有.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- 循环命令以执行另一个命令的结果。
- 福尔菲斯- 选择一个文件(或一组文件)并对每个文件执行一个命令。批处理。
- 变量- 提取变量的一部分(子字符串)。