Solved

Rename files and remove prefix through batch file

Posted on 2004-10-13
8
1,093 Views
Last Modified: 2008-01-09
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
Comment
Question by:sirasonian
8 Comments
 
LVL 7

Expert Comment

by:Pui_Yun
ID: 12303139
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
 

Author Comment

by:sirasonian
ID: 12303169
Thanks for your input. However, sorry, should've clarified - I am looking for a DOS batch file.

Thanks,
Graham
0
 
LVL 4

Expert Comment

by:avi247
ID: 12305320
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
 

Author Comment

by:sirasonian
ID: 12310192
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
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 4

Accepted Solution

by:
avi247 earned 500 total points
ID: 12329323
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
 

Author Comment

by:sirasonian
ID: 12341736
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
 
LVL 4

Expert Comment

by:avi247
ID: 12342689
Glad it helped :)
0
 

Expert Comment

by:No1Spec
ID: 12405093
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

Featured Post

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

How to remove superseded packages in windows w60 or w61 installation media (.wim) or online system to prevent unnecessary space. w60 means Windows Vista or Windows Server 2008. w61 means Windows 7 or Windows Server 2008 R2. There are various …
A short article about a problem I had getting the GPS LocationListener working.
An introduction to basic programming syntax in Java by creating a simple program. Viewers can follow the tutorial as they create their first class in Java. Definitions and explanations about each element are given to help prepare viewers for future …
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

708 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now