18

So, I've got a bunch of files with no extension. I want to write a windows batch script that will:

  1. Find files with no extension (in a specified folder)
  2. Add .bla to the end of the file name

I'm such a windows batch script noob I don't even know where to start. Suggestions?

Cœur
  • 37,241
  • 25
  • 195
  • 267
Glenn
  • 4,195
  • 9
  • 33
  • 41

3 Answers3

32

For windows batch files, this will rename only files with no extension to the .bla extension:

rename *. *.bla

Notice the first argument is a star and a dot: *.

The second argument is: *.bla

The start dot (*.) combination represents files with no extensions in this context.

Before:

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

After:

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

Additional note: The opposite commandline would rename all .bla files into no extension files.

EDIT:

For recursively renaming files with no extension across subdirectories (doesn't support spaces in paths):

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

EDIT2:

For recursively renaming files with no extension across subdirectories (supports spaces in path):

@echo off
for /f "tokens=* delims= " %%i in ('dir /b/s/A-d') DO (
  if "%%~xi" == "" rename "%%~fi" "%%~ni.bla"
)
Wadih M.
  • 12,810
  • 7
  • 47
  • 57
7

Here's another possible command for renaming files with no extensions recursively (assuming that file paths don't contain spaces):

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

Batch version (with doubled %):

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


If file or folder names contain spaces, use this command instead:

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

Batch version:

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

Edit: here's even shorter one-liner that supports spaces in paths:

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

Batch version:

@for /r %%i in (*.) do ren "%%~fi" "%%~ni.bla"
Helen
  • 87,344
  • 17
  • 243
  • 314
4

to do this in subdirectories use this:

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

if you are using this in a batch file, you need to double the '%'

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

edit:

and if you have spaces in your directory names, you can try this (batch version):

 for /f "tokens=* delims= " %%a in ('dir /b /ad /s') do rename "%%a\*." "*.bla"
akf
  • 38,619
  • 8
  • 86
  • 96