1

我有一个目录,里面有一些软件输出的文件,如下所示:

  • 待定.001
  • 待定.002
  • 待定.003
  • 等等

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

  • 待定001.csv
  • 待定002.csv
  • 待定003.csv
  • 等等

有什么建议么?

4

2 回答 2

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
)

这样,您就可以从存储它的任何地方调用该批次。

于 2012-10-20T11:44:04.307 回答
0

你为什么不参考这些帖子:

  1. 如何从命令行或使用 3rd 方工具批量重命名文件?
  2. 批量重命名命令
  3. 批量重命名实用程序
  4. 使用批处理文件
于 2012-10-19T16:22:15.680 回答