查找并重命名没有扩展名的文件?

18

所以,我有一堆没有扩展名的文件。 我想编写一个Windows批处理脚本来:

  1. 查找没有扩展名的文件(在指定的文件夹中)
  2. 在文件名末尾添加 .bla 扩展名

我对Windows批处理脚本非常陌生,甚至不知道从何开始。 有什么建议吗?

3个回答

32

对于Windows批处理文件,这将仅将没有扩展名的文件重命名为.bla扩展名:

rename *. *.bla

请注意第一个参数是星号和点号:*.

第二个参数是:*.bla

星号加点号(*.)的组合在这个上下文中表示没有扩展名的文件。

翻译前:

06/21/2009  11:57 PM                 6 test
06/21/2009  11:57 PM                 7 test.exe
06/21/2009  11:57 PM                 7 test2

之后:

06/21/2009  11:57 PM                 6 test.bla
06/21/2009  11:57 PM                 7 test.exe
06/21/2009  11:57 PM                 7 test2.bla

补充说明:相反的命令行会将所有的 .bla 文件重命名为没有扩展名的文件。

编辑:

用于递归地重命名子目录中没有扩展名的文件的命令(不支持路径中的空格):

@echo off
FOR /F %%i in ('dir /b/s/A-d') DO (
  if "%%~xi" == "" rename "%%~fi" "%%~ni.bla"
)

编辑2:

递归重命名无扩展名文件的子目录(支持路径中含有空格):

@echo off
for /f "tokens=* delims= " %%i in ('dir /b/s/A-d') DO (
  if "%%~xi" == "" rename "%%~fi" "%%~ni.bla"
)

我考虑过,但是名字末尾甚至没有一个点……这样还能行吗? - Glenn
另外,我如何包含子文件夹? - Glenn
@Alan - 是的,它可以工作。我们要谈论多少个子文件夹? - JFV
然后只需要使用相同的语法,但定义新目录: ren *. *.bla ren <新目录路径>*. *.bla - JFV
请问您能否为同类问题建议一个Linux命令? - BlackSwan
显示剩余4条评论

7

这里是另一种可能的命令,用于递归地重命名没有扩展名的文件(假设文件路径不包含空格):

for /f %i in ('dir *. /b /s /a-d') do rename "%~fi" "%~ni.bla"

批处理版本(带有双倍的%):

@echo off
for /f %%i in ('dir *. /b /s /a-d') do (
   rename "%%~fi" "%%~ni.bla"
)

如果文件或文件夹名称包含空格,请使用以下命令:
for /f "tokens=* delims= " %i in ('dir *. /b /s /a-d') do rename "%~fi" "%~ni.bla"

批处理版本:

@echo off
for /f "tokens=* delims= " %%i in ('dir *. /b /s /a-d') do (
   rename "%%~fi" "%%~ni.bla"
)
编辑: 这里有一个更短的一行代码,支持路径中的空格:
for /r %i in (*.) do ren "%~fi" "%~ni.bla"

批处理版本:

@for /r %%i in (*.) do ren "%%~fi" "%%~ni.bla"

4

如果要在子目录中执行此操作,请使用以下方法:

 for /f %a in ('dir /b /ad /s') do rename %a\*. *.bla

如果您在批处理文件中使用此命令,则需要将“%”符号加倍。

 for /f %%a in ('dir /b /ad /s') do rename %%a\*. *.bla

编辑:

如果您的目录名称中有空格,您可以尝试这个(批处理版本):

 for /f "tokens=* delims= " %%a in ('dir /b /ad /s') do rename "%%a\*." "*.bla"

这里有一个小问题 - 对于带有空格的目录不起作用...否则看起来很好。 - Glenn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接