使用批处理文件立即更改文件扩展名和名称

时间:2012-10-19 15:56:45

标签: batch-file

我有一个目录,其中包含一些软件输出的文件,如下所示:

  • Pending.001
  • Pending.002
  • Pending.003

我想使用.bat将它们重命名为:

  • Pending001.csv
  • Pending002.csv
  • Pending003.csv

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您可以循环重命名文件,使用循环变量上的修饰符~n~x分别提取每个文件的名称和扩展名,以便以新名称连接它们。由于扩展程序将与前导.一起提取,因此在删除.之前,您还需要一个变量来临时存储扩展名。

以下是如何实施上述内容的示例:

@ECHO OFF
FOR %%I IN (Pending.*) DO (
  SET "ext=%%~xI"
  SETLOCAL EnableDelayedExpansion
  RENAME "%%I" "%%~nI!ext:~1!.csv"
  ENDLOCAL
)

启用延迟扩展,因为评估ext时需要它。使用%的“正常”扩展在这里不起作用,因为这样变量在循环开始之前只会扩展一次,此时变量仍为空。相反,对于延迟扩展,每次执行包含它的特定命令时,即在循环的每次迭代中,变量都将被扩展。

上述批处理文件将处理当前目录中的文件,即您首先需要切换到需要处理文件的目录,然后调用批处理。或者,如果您要在例如在Windows资源管理器中,您可能需要将该批处理复制到包含要处理的文件的目录,并从那里调用它。

但是,您可能希望使用指定要处理的目录的参数来调用它。要使用该参数,请更改以下脚本:

@ECHO OFF
FOR %%I IN ("%~1\Pending.*") DO (
  SET "ext=%%~xI"
  SETLOCAL EnableDelayedExpansion
  RENAME "%%I" "%%~nI!ext:~1!.csv"
  ENDLOCAL
)

当然,如果文件始终位于同一目录中,您也可以指定文件的固定路径:

@ECHO OFF
FOR %%I IN ("D:\path\to\files\Pending.*") DO (
  SET "ext=%%~xI"
  SETLOCAL EnableDelayedExpansion
  RENAME "%%I" "%%~nI!ext:~1!.csv"
  ENDLOCAL
)

这样您就可以从存储它的任何地方调用批处理。

答案 1 :(得分:0)