Solved

VBS Rename Script not working correctly.

Posted on 2010-09-06
8
446 Views
Last Modified: 2012-05-10

Hey Rob files only.....
Set fso = CreateObject("Scripting.FileSystemObject") 

Set re  = New RegExp 

 

re.Pattern = "[&]" ' put all characters that you want to strip inside the brackets' 

re.IgnoreCase = True 

re.Global = True 

 

If WScript.Arguments.Unnamed.Count = 1 Then 

  If fso.FolderExists(WScript.Arguments.Unnamed(0)) Then 

    Recurse fso.GetFolder(WScript.Arguments.Unnamed(0)) 

  Else 

    WScript.Echo "Folder not found." 

  End If 

Else 

  WScript.Echo "Please give folder name as argument 1." 

End If 

 

 

Sub Recurse(f) 

  For Each sf In f.SubFolders 

    Recurse sf 

     WScript.Echo sf.Name, " -> ", re.Replace(sf.Name, "and") 

    If fso.FolderExists(Replace(sf.Name, re.Pattern, "and")) = False Then

       sf.Name = re.Replace(sf.Name, "and") 

    Else

       MsgBox "Cannot rename " & sf.Name & " to " & Replace(sf.Name, re.Pattern, "and") & ". Folder already exists."

    End If

  Next 

  For Each sf In f.Files 

    If Right(LCase(sf.Name), 4) = LCase(".doc") Then

	     WScript.Echo sf.Name, " -> ", re.Replace(sf.Name, "and") 

	    If fso.FileExists(Replace(sf.Name, re.Pattern, "and")) = False Then

	       sf.Name = re.Replace(sf.Name, "and") 

	    Else

	       MsgBox "Cannot rename " & sf.Name & " to " & Replace(sf.Name, re.Pattern, "and") & ". File already exists."

	    End If

    End If

  Next 

End Sub

Open in new window

0
Comment
Question by:JohnLo
  • 5
  • 3
8 Comments
 
LVL 65

Expert Comment

by:RobSampson
ID: 33614526
Try this to have it rename files only, and not folders, but still iterate through all subfolders.

Regards,

Rob.
Set fso = CreateObject("Scripting.FileSystemObject") 

Set re  = New RegExp 

 

re.Pattern = "[&]" ' put all characters that you want to strip inside the brackets' 

re.IgnoreCase = True 

re.Global = True 

 

If WScript.Arguments.Unnamed.Count = 1 Then 

  If fso.FolderExists(WScript.Arguments.Unnamed(0)) Then 

    Recurse fso.GetFolder(WScript.Arguments.Unnamed(0)) 

  Else 

    WScript.Echo "Folder not found." 

  End If 

Else 

  WScript.Echo "Please give folder name as argument 1." 

End If 

 

 

Sub Recurse(f) 

  For Each sf In f.Files 

    If Right(LCase(sf.Name), 4) = LCase(".doc") Then

	     WScript.Echo sf.Name, " -> ", re.Replace(sf.Name, "and") 

	    If fso.FileExists(Replace(sf.Name, re.Pattern, "and")) = False Then

	       sf.Name = re.Replace(sf.Name, "and") 

	    Else

	       MsgBox "Cannot rename " & sf.Name & " to " & Replace(sf.Name, re.Pattern, "and") & ". File already exists."

	    End If

    End If

  Next 

  For Each sf In f.SubFolders

    Recurse sf

  Next

End Sub

Open in new window

0
 
LVL 4

Author Comment

by:JohnLo
ID: 33614552
this is so weird, Back to.....
(24, 9) Microsoft VBScript runtime error: File already exists
0
 
LVL 65

Expert Comment

by:RobSampson
ID: 33614560
OK, if this next one doesn't work....I'll just add error checking to the post after that....
Set fso = CreateObject("Scripting.FileSystemObject") 

Set re  = New RegExp 

 

re.Pattern = "[&]" ' put all characters that you want to strip inside the brackets' 

re.IgnoreCase = True 

re.Global = True 

 

If WScript.Arguments.Unnamed.Count = 1 Then 

  If fso.FolderExists(WScript.Arguments.Unnamed(0)) Then 

    Recurse fso.GetFolder(WScript.Arguments.Unnamed(0)) 

  Else 

    WScript.Echo "Folder not found." 

  End If 

Else 

  WScript.Echo "Please give folder name as argument 1." 

End If 

 

 

Sub Recurse(f) 

  For Each sf In f.Files 

    If Right(LCase(sf.Name), 4) = LCase(".doc") Then

	     WScript.Echo sf.Name, " -> ", Replace(sf.Name, re.Pattern, "and")

	    If fso.FileExists(Replace(sf.Name, re.Pattern, "and")) = False Then

	       sf.Name = re.Replace(sf.Name, "and") 

	    Else

	       MsgBox "Cannot rename " & sf.Name & " to " & Replace(sf.Name, re.Pattern, "and") & ". File already exists."

	    End If

    End If

  Next 

  For Each sf In f.SubFolders

    Recurse sf

  Next

End Sub

Open in new window

0
 
LVL 65

Accepted Solution

by:
RobSampson earned 500 total points
ID: 33614566
This is has error checking instead.
Set fso = CreateObject("Scripting.FileSystemObject") 

Set re  = New RegExp 

 

re.Pattern = "[&]" ' put all characters that you want to strip inside the brackets' 

re.IgnoreCase = True 

re.Global = True 

 

If WScript.Arguments.Unnamed.Count = 1 Then 

  If fso.FolderExists(WScript.Arguments.Unnamed(0)) Then 

    Recurse fso.GetFolder(WScript.Arguments.Unnamed(0)) 

  Else 

    WScript.Echo "Folder not found." 

  End If 

Else 

  WScript.Echo "Please give folder name as argument 1." 

End If 

 

 

Sub Recurse(f) 

  For Each sf In f.Files 

    If Right(LCase(sf.Name), 4) = LCase(".doc") Then

	     WScript.Echo sf.Name, " -> ", Replace(sf.Name, re.Pattern, "and")

	    On Error Resume Next

	       sf.Name = re.Replace(sf.Name, "and") 

	    If Err.Number <> 0 Then

	       MsgBox "Cannot rename " & sf.Name & " to " & Replace(sf.Name, re.Pattern, "and") & ". Error " & Err.Number & ": " & Err.Description

	       Err.Clear

	    End If

	    On Error GoTo 0

    End If

  Next 

  For Each sf In f.SubFolders

    Recurse sf

  Next

End Sub

Open in new window

0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 4

Author Comment

by:JohnLo
ID: 33614593
ok lots of error 58's but here is what i think it might be doing. I think it is trying to rename anything with "&" in the name as well as  anything with "and" in the name. if i click ok to all the errors it will go through and finally rename it. issue is i cant click ok when this runs against a folder at night.
 
e.g. filenameandext.doc and not be renamed filenameandext.doc
0
 
LVL 65

Expert Comment

by:RobSampson
ID: 33614613
If you change
MsgBox
to
wscript.echo
and then run the script with
cscript MyScript.vbs

it won't make you click OK....but does it still appear to work correctly?

Rob.
0
 
LVL 4

Author Comment

by:JohnLo
ID: 33630766
ill try it tonight.......
0
 
LVL 65

Expert Comment

by:RobSampson
ID: 33670856
Hi JohnLo, did you have any luck with your testing?

Regards,

Rob.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Recently I finished a vbscript that I thought I'd share.  It uses a text file with a list of server names to loop through and get various status reports, then writes them all into an Excel file.  Originally it was put together for our Altiris server…
This is an addendum to the following article: Acitve Directory based Outlook Signature (http://www.experts-exchange.com/Programming/Languages/Visual_Basic/VB_Script/Q_24950055.html) The script is fine, and works in normal client-server domains…
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…
This is a video that shows how the OnPage alerts system integrates into ConnectWise, how a trigger is set, how a page is sent via the trigger, and how the SENT, DELIVERED, READ & REPLIED receipts get entered into the internal tab of the ConnectWise …

932 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

12 Experts available now in Live!

Get 1:1 Help Now