【问题标题】:Extracting Dir-Path and File-Name from absolute path of a file从文件的绝对路径中提取目录路径和文件名
【发布时间】:2012-10-04 02:53:06
【问题描述】:

从一个目录开始,我想:

  1. 递归查看每个子文件夹
  2. 标识文件列表
  3. 对这些文件应用更改
  4. 回到起点,对剩余的目录重新做 1 到 3

这是我通过 DOS 批处理文件进行的尝试:

 for /r . %%g in (*.pm) do (
  SET FILEPATH=??
  SET FILENAME=??
  SET CURRENT="%cd%"
  cd %FILEPATH%
  perl Perl_Script.pl %FILENAME%
  cd "%CURRENT"
   )

FILEPATH 和 FILENAME 应该设置成什么?

根据 Jakub 的回答,我将程序修改为:

 for /r . %%g in (*.pm) do (
  SET FILEPATH="%%~pg"
  SET FILENAME="%%~g"
  SET CURRENT="%cd%"
  cd %FILEPATH%
  perl Perl_Script.pl %FILENAME%
  cd %CURRENT%
   )

我可以从日志中确定 FILENAME 和 FILEPATH 正在接收正确的值,但出于某种深不可测的原因,%FILEPATH% 和 %FILENAME% 将始终设置为首先分配给这些变量的值。

在谷歌上搜索了几个小时后,我意识到有这个延迟扩展的概念。最后(经过一场艰苦的决斗),最终归结为:

 setlocal enabledelayedexpansion
 for /r . %%g in (*.pm) do (
  SET FILEPATH="%%~pg"
  SET FILENAME="%%~g"
  SET CURRENT="%cd%"
  cd !FILEPATH!
  perl Perl_Script.pl !FILENAME!
  cd %CURRENT%
   )
 endlocal

像魅力一样工作!!!

【问题讨论】:

    标签: batch-file directory filepath


    【解决方案1】:

    这是一个answer,详细说明了如何将文件名拆分为单独的文件信息片段。在您的情况下,您需要 %%~ng 作为名称,%%~pg 作为路径。

    【讨论】:

      猜你喜欢
      • 2011-02-01
      • 2023-04-05
      • 2011-09-01
      • 2010-10-01
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      相关资源
      最近更新 更多