Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

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

Posted on 2010-09-21
6
Medium Priority
?
3,014 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 58

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
Efficient way to get backups off site to Azure

This user guide provides instructions on how to deploy and configure both a StoneFly Scale Out NAS Enterprise Cloud Drive virtual machine and Veeam Cloud Connect in the Microsoft Azure Cloud.

 
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

Important Lessons on Recovering from Petya

In their most recent webinar, Skyport Systems explores ways to isolate and protect critical databases to keep the core of your company safe from harm.

Question has a verified solution.

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

TOMORROW TOMORROW.BAT is inspired by a question I get asked over and over again; that is, "How can I use batch file commands to obtain tomorrow's date?" The crux of this batch file revolves around the XCOPY command - a technique I discovered w…
This article was inspired by a question here at Experts Exchange (http://www.experts-exchange.com/Software/Photos_Graphics/Images_and_Photos/Q_28629170.html). The requirements stated in that question are (1) reduce the file size of a large number of…
This course is ideal for IT System Administrators working with VMware vSphere and its associated products in their company infrastructure. This course teaches you how to install and maintain this virtualization technology to store data, prevent vuln…
We’ve all felt that sense of false security before—locking down external access to a database or component and feeling like we’ve done all we need to do to secure company data. But that feeling is fleeting. Attacks these days can happen in many w…

963 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