Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1143
  • Last Modified:

Rename files and remove prefix through batch file

Dear All:

I am trying to rename files in a directory (c:\temp) with a batch file that will take filenames:

U000123.dat
U000947.dat
U001658.dat
U006791.dat

and rename them to

123.dat
947.dat
1658.dat
6791.dat

The rule is to basically strip the characters U and the 2~3 zeros.

TIA!
0
sirasonian
Asked:
sirasonian
1 Solution
 
Pui_YunCommented:
This isn't precisely a batch file, but ....  Here's a quick vb script that should do the trick, just create a file with a vbs extension (create a text file and rename it to a .vbs) copy the code below and run it.

One last thing, this will only work if the only files in the C:\Temp directory are the ones that you have mentioned and will not recursive do sub folders.  So make a backup of your C:\Temp directory and delete all other files but the type you mentioned.  Hope this helps:

Dim fso, fold, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set fold = fso.GetFolder("C:\Temp")
For Each f In fold.Files
    FileName = Right(f.Name, Len(f.Name) - 1)
    extension = Right(f.Name, Len(f.Name) - InStrRev(f.Name, "."))
    FileName = Left(FileName, InStrRev(FileName, ".") - 1)    
    f.Move f.ParentFolder & "\" & Int(FileName) & "." & extension
Next

Let me know if you need any help
0
 
sirasonianAuthor Commented:
Thanks for your input. However, sorry, should've clarified - I am looking for a DOS batch file.

Thanks,
Graham
0
 
avi247Commented:
Put it in the directory you want to rename files in.
Note: It removes all occurences of U and 0 from the file name
E.g. U002330.dat  => 233.dat

------------- Batch File starts here ------------

@Echo Off

SETLOCAL


For /F "tokens=*" %%I in ('Dir /B %~f1.\*.dat') Do Call :RENAMEFILES %~n1 %%I
GoTo :EOF

:RENAMEFILES

Set FName=%~n1

REM Replace U with <blank>
Set FName=%FName:U=%

REM Replace 0 with <blank>
Set FName=%FName:0=%

Echo %~n1%~x1 Changed To  %Fname%%~x1
Rename %~n1%~x1  %FName%%~x1
GoTo :EOF
0
What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

 
sirasonianAuthor Commented:
avi247,

Thanks for the great script. Could I request one more change before I accept your answer? Because some files will be named:

U000130.dat
U006480.dat
U007120.dat
so on...

trailing zeros should not be removed because U000130.dat is going to be changed to 13.dat however it's really 130.dat and will conflict with U000013.dat.

TIA!
0
 
avi247Commented:
Graham:
Sorry for the late reply. I am having problems trying to get it work the way you want using pure DOS commands.
Here's a bat file that dynamically uses vbscript to rename files the way you want.

--------batch file starts -----------

@echo off

:: setup variables for the batch
setlocal
set vbscript=%temp%\~%~n0.vbs
set vbreplace=cscript /NoLogo "%vbscript%"
echo %vbscript%

>"%vbscript%" echo  Dim fso, f, sf, intCount, strFile, pos  
>>"%vbscript%" echo  pos = 1
>>"%vbscript%" echo intCount = 0        
>>"%vbscript%" echo Set fso = CreateObject("Scripting.FileSystemObject")
>>"%vbscript%" echo Set f = fso.GetFolder("D:\Work\Source Code\Batch Files\Temp")
>>"%vbscript%" echo For Each sf In f.Files
>>"%vbscript%" echo pos = 1
>>"%vbscript%" echo strFile = sf.Name
>>"%vbscript%" echo If UCase(Left(strFile, 1)) = "U" Then strFile = Right(strFile, Len(strFile) - 1)
>>"%vbscript%" echo For intCount = 0 To Len(strFile)
>>"%vbscript%" echo  Do While Mid(strFile, pos, 1) = "0"
>>"%vbscript%" echo    pos = pos + 1
>>"%vbscript%" echo  Loop
>>"%vbscript%" echo  Exit For
>>"%vbscript%" echo Next
>>"%vbscript%" echo strNewName = Right(strFile, Len(strFile) - pos + 1)
>>"%vbscript%" echo fso.MoveFile sf, Replace(sf,strFile,strNewName)
>>"%vbscript%" echo Next

%vbreplace%

:: cleanup
del "%vbscript%"

--------batch file ends -----------
0
 
sirasonianAuthor Commented:
avi247,

Worked beautifully! Actually, the commands did not strip the leading "U" however your two answers provided me with enough information to get the job done.

Graham
0
 
avi247Commented:
Glad it helped :)
0
 
No1SpecCommented:
This is just an afterthought. I tried something else and it didnt work as great.
Here's the script:

@echo off
:start
For /F "tokens=*" %%I in ('Dir /B U00*.*') Do Call :Ren1 %%I

:Ren1
set name=%%I:~4%
ren %I% %name%

For some reason it only renamed one of the files then it stopped.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now