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

时间:2014-04-30 14:19:24

标签: windows batch-file

我需要递归搜索目录,当找到特定名称的文件时,然后重命名它。关键是我还需要稍后重新命名。

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

上面的工作正在进行中,但我无法解决语法问题,以便将其重新命名。

我的下一个想法是,而不是添加扩展名,可能重命名扩展名,但我无法弄清楚如何。

任何人都有任何想法。我搜索过的dos从未成为我的好朋友。

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

3 个答案:

答案 0 :(得分:1)

注意:这些是在批处理文件中使用的命令行,当从命令提示符直接执行它们时,请使用%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"

答案 1 :(得分: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

答案 2 :(得分:0)

可能重复Changing all files' extensions in a folder with one command on Windows

但它会是这样的

ren *.X *.Y

其中“X”是原始扩展名,“Y”是您要更改的扩展名。

相关问题