Solved

Remove special characters from multiple files batch script solution works on everything but '~'

Posted on 2010-09-21
6
2,635 Views
Last Modified: 2012-05-10
We have a client who needs to rename thousands of files in order to upload them to SharePoint and many of those files contain tildes(~).

I have used the script suggested in the related question to replace many different characters in a filename, but it doesn't work on tildes even if it is preceded by a ^ to make it a literal.

Here's the script from the other response.  I modified it to allow a second parameter to pass in the desired character to replace.  Whether I use a parameter or the literal ^~, it doesn't work:

@echo off
 
setlocal ENABLEDELAYEDEXPANSION


if "%~1"=="" (
      echo # ERROR - supply the directory from which to begin the search for
      echo           filenames containing the ampersand symbol.  Any file
      echo           encountered with have the ampersand replaced by 'and'.
      goto :EOF
)
 
if not exist "%~1" (
      echo # ERROR - directory NOT found
      echo          = '%~1'
      goto :EOF
)
 
echo/
echo + Parsing "%~1", please wait ...
 
for /f "tokens=*" %%F in ('dir "%~1" /s/b') do (
      set fileNAME=%%F
      set newFILEname=!fileNAME:^%2= !
      if not "!newFILEname!"=="!fileNAME!" (
            for /f "tokens=*" %%N in ("!newFILENAME!") do (
                  echo   + renaming "!fileNAME!" to "!newFILEname!"
                  ren "!fileNAME!" "%%~nxN"
                  if not errorlevel 1 (
                        echo     - SUCCESS
                  ) else (
                        echo     # FAILED to rename "!fileNAME!"
                  )
            )
      )
)
 
echo - COMPLETE
0
Comment
Question by:cpgtechsupport
6 Comments
 
LVL 14

Expert Comment

by:sungenwang
ID: 33726738
Not sure why it doesn't work with '~' in batch command. If you are willing to try running vbscript it is very simple to do. I have included the code to do it:

1. Copy the code into notepad
2. Change line 1, 2, and 3 to appropriate value (set it to a 'test' path first!)
3. Save the change to a file with a "vbs" extension.
4. Double-click the file to run it.

You can change the first 3 lines to replace different symbols. Beware as this code will also change files in sub-folders! Remove line 19-21 if you don't need that.

sew

strFolderName = "C:\temp"

strCharToFind = "~"

strCharToReplaceWith = "_tilda_"



Set objFSO = CreateObject("Scripting.FileSystemObject")



Call TraverseFolder(strFolderName)



Sub TraverseFolder(strFolderName)

	Set objCurrentFolder = objFSO.GetFolder(strFolderName)



	For Each objFile In objCurrentFolder.Files

		If InStr(objFile.name, strCharToFind) > 0 Then

			strNewName = Replace(objFile.name, strCharToFind, strCharToReplaceWith)

			objFSO.MoveFile objFile.ParentFolder & "\" & objFile.name, objFile.ParentFolder & "\" & strNewName

		End If

	Next



	For Each objFolder In objCurrentFolder.subFolders

		Call TraverseFolder(objFolder.ParentFolder & "\" & objFolder.name)

	Next

End Sub



msgbox "done"

Open in new window

0
 
LVL 21

Expert Comment

by:AmazingTech
ID: 33728068
Instead of replacing the tilda with a space how about just removing the tilda?


@echo off

 

setlocal ENABLEDELAYEDEXPANSION





if "%~1"=="" (

      echo # ERROR - supply the directory from which to begin the search for

      echo           filenames containing the ampersand symbol.  Any file

      echo           encountered with have the ampersand replaced by 'and'.

      goto :EOF

)

 

if not exist "%~1" (

      echo # ERROR - directory NOT found

      echo          = '%~1'

      goto :EOF

)

 

echo/

echo + Parsing "%~1", please wait ...

 

for /f "tokens=*" %%F in ('dir "%~1" /s/b') do (

      echo %%F | find "%2"

      if not errorlevel 1 (

          for /f "tokens=1,2,3,4,5,6,7 delims=%2" %%G in ('echo %%~nxF') do (

              set newFILEname=%%G%%H%%I%%J%%K%%L%%M

              echo   + renaming "%%F" to "!newFILEname!"

              ren "%%F" "!newFILEname!"

              if not errorlevel 1 (

                  echo     - SUCCESS

              ) else (

                  echo     # FAILED to rename "!fileNAME!"

              )

          )

      )



)

 

echo - COMPLETE

Open in new window

0
 
LVL 52

Expert Comment

by:Bill Prew
ID: 33728324
Here's a quick example of a way you can remove the unwanted ~ characters from a string in batch.

~bp
@echo off
set Test=Foo~Bar~Rest
echo [%Test%]
for /F "tokens=1-10* delims=~" %%A in ("%Test%") do set Test=%%A%%B%%C%%D%%E%%F%%G%%H%%I%%J
echo [%Test%]

Open in new window

0
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 
LVL 2

Expert Comment

by:misterlupo
ID: 33732573
If you don't mind to use a 3rd party application try tr.exe from the GNU utilities for Win32  to remove unwanted characters from the stream.

C:\>set test=One~Two*Three-Four
C:\>echo %test%|tr -d "~"
OneTwo*Three-Four

C:\>echo %test%|tr -d "~*-"
OneTwoThreeFour



0
 
LVL 5

Expert Comment

by:MAdS
ID: 33795659
Replace  
set newFILEname=!fileNAME:^%2= !
by
set newFILEname=%fileNAME:^%2= %
And you can pass only ~ as parameter (^~ is not necessary, but doesn't hurt either).

 
0
 
LVL 1

Accepted Solution

by:
cpgtechsupport earned 0 total points
ID: 33931534
Hi, thanks for the help all.  We ended up resolving the issue using the FileRenamer application.
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

Suggested Solutions

The following is a collection of cases for strange behaviour when using advanced techniques in DOS batch files. You should have some basic experience in batch "programming", as I'm assuming some knowledge and not further explain the basics. For some…
I have published numerous articles here at Experts Exchange that present programs/scripts written in a language called AutoHotkey. Each of those articles has a brief paragraph describing where to download the product and how to install it. I have al…
This Micro Tutorial will give you a basic overview how to record your screen with Microsoft Expression Encoder. This program is still free and open for the public to download. This will be demonstrated using Microsoft Expression Encoder 4.
With the power of JIRA, there's an unlimited number of ways you can customize it, use it and benefit from it. With that in mind, there's bound to be things that I wasn't able to cover in this course. With this summary we'll look at some places to go…

867 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

20 Experts available now in Live!

Get 1:1 Help Now