首页 > 解决方案 > 提取变量的一部分

问题描述

我正在尝试将循环中的文件的名称提取为字符串。将许多软件输出组织在不同的文件夹中,由当前进程文件命名。

到目前为止,我得到了这个,但我无法获得变量上的字符串:

set DirecoryT=%%G
FOR /R D:\LiDAR_Data\LiDAR_DATA_EBA\ %%G in (*.laz) do (
    echo Directory %DirecoryT%
    set File=%DirecoryT:~29,9%
    echo Processing file %File%
pause
)
pause

标签: stringbatch-filevariablescmd

解决方案


试试这个:

@echo off
for /R "D:\LiDAR_Data\LiDAR_DATA_EBA\" %%G in (*.laz) do (
   echo File Extension only: "%%~xG"
   echo FileName with Extension: "%%~nxG"
   echo FileName without Extension: "%%~nG"
   echo Full path and name: "%%G"
   echo Directory to file only: "%%~pG"
   echo Drive and directory is: "%%~dpG"
 )
 pause

注意我们如何获得字符串的各个部分。有关变量处理的更多信息,只需从命令行运行for /?并阅读帮助。

因此,根据您的尝试,更接近您真正想要的东西。

@echo off
for /R "D:\LiDAR_Data\LiDAR_DATA_EBA\" %%G in (*.laz) do (
   echo FileName "%%~nxG"
   echo Directory "%%~dpG"
   echo Processing file "%%~nxG"
 )
 pause

编辑

根据您的最后一条评论,仅查看文件所在的最后一个文件夹:

@echo off
for /R "D:\LiDAR_Data\LiDAR_DATA_EBA\" %%G in (*.laz) do (
   echo FileName "%%~nxG"
   echo Directory "%%~dpG"
   echo Processing file "%%~nxG"
  for %%i in ("%%~dpG\.") do echo Last Folder "%%~nxi"
 )
pause

推荐阅读