我有一个目录,其中包含一些软件输出的文件,如下所示:
我想使用.bat将它们重命名为:
有什么建议吗?
答案 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)