Gabriel Meono
Gabriel Meono

Reputation: 1000

Batch remove parenthesis from file name

After successfully removing a bunch of Google Drive Folder duplicates, some files retain a "filename(2)"name.

Is there a way to batch rename every file so the parenthesis and the number inside the parenthesis is gone?

That includes folders and sub-folders.

Upvotes: 3

Views: 8372

Answers (3)

SachaDee
SachaDee

Reputation: 9545

Try like this :

Create a file test.bat with the code below in it and replace the path to test in the var $path

@echo off 
set $path="C:\Users\CN Micros\Desktop\PROGRAMMATION\test"
for /f "tokens=1-3 delims=^(^)" %%a in ('dir /b/a-d %$path%') do (
if exist %$path%\"%%a(%%b)%%c" echo ren %$path%\"%%a(%%b)%%c" "%%a%%c"
)
pause

Then run it in the CMD or by double clicking. If the output is ok for you remove the echo

The program create 3 tokens : %%a = what's before the (), %%b What's inside the () and %%c what's after the ().

Then we arrange this 3 tokens to rename the files without the ().

If you have some file who have the same final name ie : "file(1)name", "file(2)name" --> "filename" It will work only with the first one. If you have this case you have to add a counter at the end of file to be sure that they will be renamed.

Upvotes: 3

foxidrive
foxidrive

Reputation: 41234

This will create renfiles.bat.txt for you to examine in Notepad and then rename to .bat and execute if you are happy with it.

@echo off
dir /b /a-d *(*).* |find /i /v "%~nx0" |find /i /v "repl.bat" |repl "(.*)\(.*\)(\..*)" "ren \q$&\q \q$1$2\q" xa >"renfiles.bat.txt"

This uses a helper batch file called repl.bat - download from: https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

Place repl.bat in the same folder as the batch file or in a folder that is on the path.

Edit: This version will recurse through subdirectories:

@echo off
dir /b /s /a-d *(*).* |find /i /v "%~nx0" |find /i /v "repl.bat" |repl ".*\\(.*)\(.*\)(\..*)" "ren \q$&\q \q$1$2\q" xa >"renfiles.bat.txt"

Upvotes: 2

Magoo
Magoo

Reputation: 80023

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
FOR /f "delims=" %%a IN (
  'dir /b /s /a-d "%sourcedir%\*" '
 ) DO (
 SET "name=%%~na" 
 SETLOCAL ENABLEDELAYEDEXPANSION
 SET "newname=!name:)=!"
 SET "newname=!newname:(=!"
 IF "!name!" neq "!newname!" (
  IF EXIST "%%~dpa!newname!%%~xa" (ECHO cannot RENAME %%a
   ) ELSE (ECHO(REN "%%a" "!newname!%%~xa")
 )
 endlocal
)

GOTO :EOF

You'd need to set your required directory into sourcedir. I used u:\sourcedir which suits my testing.

The required REN commands are merely ECHOed for testing purposes. After you've verified that the commands are correct, change ECHO(REN to REN to actually rename the files.

Upvotes: 2

Related Questions