0

从一个目录开始,我想:

  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

奇迹般有效!!!

4

1 回答 1

1

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

于 2012-10-13T13:41:10.527 回答