从文件的绝对路径中提取Dir-Path和File-Name

时间:2012-10-13 13:19:20

标签: batch-file directory filepath

从目录开始,我想:

  1. 递归查看每个子文件夹
  2. 识别文件列表
  3. 对这些文件应用更改
  4. 返回起点并在剩余目录上重新执行1到3
  5. 这是我尝试通过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正在接收正确的值,但是对于sime不可思议的原因,%FILEPATH%和%FILENAME%总是会被设置为FIRST分配给这些变量的值。

    谷歌搜索几个小时后,我意识到这是一个delaye扩展概念。最后(经过艰苦的决斗之后),它终于归结为:

     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
    

    像魅力一样工作!!!

1 个答案:

答案 0 :(得分:1)

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