批处理文件:当同一文件夹中存在另一个 .xlsx 文件时如何重命名 .xls 文件?

Batch file : how to rename a .xls file when another .xlsx file present in same folder?

我有一个包含 1 个批处理文件和 2 个 excel 文件的文件夹 - old.xlsnew.xlsx

我需要使用同一文件夹中的批处理文件将这两个文件重命名为 test.xls 和 test.xlsx。

当我尝试重命名 .xlsx 文件时,我可以使用以下命令成功完成:

ren *.xlsx test.xlsx

但是当我尝试对 .xls 文件执行相同操作时,出现以下错误:

ren *.xls test.xls

A duplicate file name exists, or the file
cannot be found.

有人能告诉我怎么做吗?我是批处理文件的新手。

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
PUSHD "%sourcedir%"


ECHO directory before xlsx rename
DIR /x /a-d
REN *.xlsx test.xlsx
ECHO ============================
ECHO directory before XLS rename
DIR /x /a-d
ECHO.
FOR %%a IN (*.xls) DO ECHO "XLS" name found: %%a
ECHO.
FOR %%a IN (*.xls) DO IF /i "%%~xa"==".xls" REN "%%a" test.xls
ECHO ============================
ECHO directory after XLS rename
DIR /x /a-d


popd
GOTO :EOF

默认情况下,名称不符合 DOS“8.3”文件名约定(名称最多 8 个字符,扩展名最多 3 个,以点分隔)的每个文件或目录都将分配一个 "short name" 确实符合。

以上代码(我使用u:\sourcedir作为测试目录)将显示步骤。请注意 dir /x 显示短名称和长名称。 /a-d 抑制目录名)。

so - 魔术是检查全名扩展实际上 .xls.