Solved

# Truncate folder name

Posted on 2013-02-05
558 Views
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
Question by:cbones
• 4

LVL 43

Expert Comment

ID: 38857614
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__"

0

LVL 43

Expert Comment

ID: 38857622
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

Author Comment

ID: 38857674
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

LVL 43

Accepted Solution

Steve Knight earned 175 total points
ID: 38857736
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"


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

LVL 52

Assisted Solution

Bill Prew earned 175 total points
ID: 38857753
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"
)
)

~bp
0

LVL 43

Expert Comment

ID: 38859800
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

## Featured Post

Question has a verified solution.

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

### Suggested Solutions

This tutorial will discuss the log-in process using WhizBase. In this article I assume you already know HTML. I will write the code using WhizBase Server Pages, so you need to know some basics in WBSP (you might look at some of my other articles abo…
Recently I have been answering a lot of questions like this in IT forums that I frequent. The question posed is usually something along the lines of "We have software X installed and need to uninstall it for reason Y" or some other variant of the sa…
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.