1

I'm aware there's already questions like this but they either:

  • Throw errors that the file can't be found
  • Don't work or they uppercase instead

I'm unable to post comments in the other posted answers due to low reputation.

I don't mind, either, if it's .bat ran in the target directory or ran from the command line directly. I can only do basic stuff in MS-DOS.

So far I can set the directory I want:

x:
cd x:/folder1/folder2/target_folder

The result I want is this:

some_folder_in_target_folder/IMAGE1.jpg
some_folder_in_target_folder/Second/image1.JPG
some_folder_in_target_folder/Second/IMAGE2.JPG
some_folder_in_target_folder/Second/image3.jpg

to appear as:

some_folder_in_target_folder/image1.jpg
some_folder_in_target_folder/Second/image1.jpg
some_folder_in_target_folder/Second/image2.jpg
some_folder_in_target_folder/Second/image3.jpg

I don't want to modify the folder names themselves.

These files are on a USB drive. I don't know if that's causing some of the errors I saw from the other code samples I've tried.

Nalaurien
  • 998
Nova
  • 155

1 Answers1

1

I disagree with Seth and Luru in this special case, there is a wonderful solution with a small flaw, this cmd line should remedy that (if the output looks right, remove the echo):

For /r X:\Path %A in (.) do @For /f "eol=: delims=" %F in ('dir /l/b/a-d "%A" 2^>NUL') do @Ren "%~fA\%F" "%F"

In a batch the % has to be doubled:

For /r X:\Path %%A in (.) do @for /f "eol=: delims=" %%F in (
  'dir /l/b/a-d "%%A" 2^>NUL'
) do Ren "%%~fA\%%F" "%%F"

The opposite, converting to uppercase would look clumsy in batch.

A powershell solution:

Get-ChildItem -Path X:\path -File|
  where-Object {$_.Name -cne $_.Name.ToLower()}|
    Rename-Item -NewName {$_.Name.ToLower()} -confirm

The same with aliases as a one liner:

gci -Path X:\path -File|? {$_.Name -cne $_.Name.ToLower()}|Ren -new {$_.Name.ToLower()} -confirm
LotPings
  • 7,391