在 Windows 批处理脚本中重命名多个文件扩展名

问题描述 投票:0回答:3

我需要递归搜索目录,当找到特定名称的文件时,然后重命名它。 关键是我以后还需要能够将其重命名回来。

for /r %%x in (*.aspx) do move %%x %%x.txt

上述内容可以继续使用,但我无法制定语法来将其重命名回来。

我的下一个想法是不添加扩展程序,也许重命名扩展程序,但我不知道如何操作。

任何人有任何想法。 我用dos搜索过从来都不是我的好朋友。

如果这更容易的话,我会很高兴。

windows batch-file
3个回答
2
投票

重要提示:这些是用于 在批处理文件中使用的命令行,直接从命令提示符执行它们时,请使用

%x
而不是
%%x

这会重命名 *.apsx 以将

.txt
添加到末尾。

for /r %%x in (*.aspx) do move "%%x" "%%x.txt"

编辑: 下面有一个更改来处理被遗漏的递归重命名。

这会重命名 *.apsx 以删除末尾的

.txt

for /r %%x in (*.aspx.txt) do move "%%x" "%%~dpx%%~nx"

0
投票

您似乎想以某种方式“隐藏”文件。这可以通过从文件名中去除扩展名来完成。不幸的是,这不能在

for
循环中“内联”完成,所以你需要这样的东西。

for /r %%x in (*.aspx) do call :disable %%x

goto :eof

:disable
  ren %1 %~n1.old
  goto :eof

需要子例程,因为您不能在

for
循环内写入 %~nX。假设
for
循环找到了一个文件
index.aspx
那么子例程中的重命名将扩展为:

ren c:\some\dir\where\the\files\are\stored\index.aspx index.old

您可以将“旧”和“新”扩展作为参数传递

for /r %%x in (*.%1) do call :disable %%x %2

goto :eof

:disable
  ren %1 %~n1.%2
  goto :eof

假设您将以上内容存储在名为“my_rename.cmd”的批处理文件中,您可以运行

my_rename aspx old

“隐藏”文件。

要再次“启用”它们,您可以运行:

my_rename old aspx

如果您的文件存储在包含空格的目录中,您需要将

ren %1 %~n1.%2
更改为
ren "%1" %~n1.%2


0
投票

可能重复在 Windows 上使用一个命令更改文件夹中所有文件的扩展名

但是会是这样的

ren *.X *.Y

其中“X”是原始分机号,“Y”是您要更改的分机号。

© www.soinside.com 2019 - 2024. All rights reserved.