• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 705
  • Last Modified:

Truncate folder name

Hello,

I am looking for a script that can truncate folders in a directory.  Each folder in the main directory has three underscores (_) in the file name.  I need to have a script that will remove the third underscore and everything after it.

Can this be done with a batch file?

Thank you.
0
cbones
Asked:
cbones
  • 4
2 Solutions
 
Steve KnightIT ConsultancyCommented:
If there aren't any other underscores in the filenames you can probably do it with this... it will look for all dirs with with three underscores in then pass the bit before the first _ into %%a and the bit after the underscores into %%b

Steve

@echo off
cd /d "c:\root directory"
for /f "tokens=1* delims=_" %%a in ('dir /b /ad *___*') do echo rename "%%a___%%b" "%%a__"

Open in new window

0
 
Steve KnightIT ConsultancyCommented:
That will SHOW you the commands it will run on the screen.  If they look OK remove the word echo before the rename command.

If there is the possibility of other _ characters in the foldername will have to be done in different way.

Steve
0
 
cbonesAuthor Commented:
Steve,

Thank you for your response.  When I run this it removes two underscore only if the three are in the folder name together.  

I can have a file name like this:  file_test_one_temp_0212312

What I am looking to do is to remove everything after the third underscore.

Thank you.
0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
Steve KnightIT ConsultancyCommented:
Ahh OK then if there are always three or more underscores and you want a maximum of two then try this:

@echo off
cd /d "c:\root directory"
for /f "tokens=1,2,3* delims=_" %%a in ('dir /b /ad *_*_*_*') do echo rename "%%a_%%b_%%c_%%d" "%%a_%%b_%%c"

Open in new window


Looks for the pattern *_*_*_* and splits the filename at the _ and renames to the first three parts.

In your example "file_test_one_temp_0212312" becomes "file_test_one"

Steve
0
 
Bill PrewCommented:
This should do what you are looking for.  Adjust the BaseDir name as needed.  Currently it wont rename the folders, just show the command it would execute. This will allow you to test and verify, if it looks good remove the ECHO from the REN line.

@echo off
setlocal

set BaseDir=c:\ee\EE28021328\basedir

for /D %%D in ("%BaseDir%\*_*_*_*") do (
  for /F "tokens=1-3 delims=_" %%A in ("%%~nD") do (
    ECHO ren "%%~D" "%%~A_%%B_%%C"
  )
)

Open in new window

~bp
0
 
Steve KnightIT ConsultancyCommented:
Thanks.  Should have done it like Bill did really anyway, only reason I didn't is because I thought you meant three underscores in a row.
Steve
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

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

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