VBScript or Batch to rename files based on the name of the folder they are in.

Please keep in mind I am a complete scripting n00b.    This could be a batch file or vbs script.  I am open to other suggestions as well.

We are restoring an old database manually.   There are 500 or so folders in the directory listed below.

D:\Data\XactRestored\Data\Xactware\Xm8\data\estimates\instance=0\profile=2T

Each folder is named based on the name of the database entry.  

For example:

name=DOE__JOHN
name=DOE__JANE
name=55-J058-872

Each of these folders has a file in it called "doc.zip".

Like so:  

D:\Data\XactRestored\Data\Xactware\Xm8\data\estimates\instance=0\profile=2T\name=DOE__JOHN\doc.zip
D:\Data\XactRestored\Data\Xactware\Xm8\data\estimates\instance=0\profile=2T\name=DOE__JANE\doc.zip
D:\Data\XactRestored\Data\Xactware\Xm8\data\estimates\instance=0\profile=2T\name=55-J058-872\doc.zip

 Please note that while these zip files are all named the same thing, they contain very different data.  

Each zip file needs to be named based on the folder it is in and moved to another directory (D:\Data\XactRestored\Done\)

For example:

D:\Data\XactRestored\Data\Xactware\Xm8\data\estimates\instance=0\profile=2T\name=DOE__JOHN\doc.zip

would be renamed to:

D:\Data\XactRestored\Data\Xactware\Xm8\data\estimates\instance=0\profile=2T\name=DOE__JOHN\DOE__JOHN.ESX

then moved to:

D:\DATA\XactRestored\Done\DOE__JOHN.ESX

The final result would look like this:

D:\DATA\XactRestored\Done\DOE__JOHN.ESX
D:\DATA\XactRestored\Done\DOE__JANE.ESX
D:\DATA\XactRestored\Done\55-J058-872.ESX




LVL 1
zreismanAsked:
Who is Participating?
 
SteveGTRConnect With a Mentor Commented:
Well, here's my version. It strips out the "name=" as requested:
@echo off
 
setlocal
 
set baseDir=D:\Data\XactRestored\Data\Xactware\Xm8\data\estimates\instance=0\profile=2T
set destDir=D:\DATA\XactRestored\Done
 
pushd "%baseDir%"
 
for /f "tokens=*" %%a in ('dir /b /ad "name=*" 2^>NUL') do if exist "%%a\doc.zip" call :PROCESS "%%a"
 
popd
 
goto :EOF
 
:PROCESS
 
set newName=
 
for /f "tokens=1,*" %%a in ('echo %~1') do set newName=%%b
 
if "%newName%"=="" echo Couldn't strip out "name=" from %~1&goto :EOF
 
set newName=%newName%.ESX
 
if exist "%destDir%\%newName%" del "%destDir%\%newName%"
 
move "%~1\doc.zip" "%destDir%\%newName%"
 
goto :EOF

Open in new window

0
 
Shift-3Commented:
Here is a batch script which should do what you want.

Paste the script below into a new file with a .cmd extension.  Double-clicking it should rename and move the files.


@echo off
setlocal
 
set root=D:\Data\XactRestored\Data\Xactware\Xm8\data\estimates\instance=0\profile=2T
set target=D:\DATA\XactRestored\Done
 
for /F "tokens=* usebackq" %%G in (`dir "%root%" /A:D /B`) do (
 ren "%root%\%%G\doc.zip" "%%G.ESX"
 move "%root%\%%G\%%G.ESX" "%target%"
)
 
endlocal

Open in new window

0
 
zreismanAuthor Commented:
Thanks.   Any recommendations where to go to achieve at least semi uber batching skills?
0
 
SteveGTRCommented:
Right where you are. EE is where I have learned my current batch skills. I'll try to figure out another person's problem and in the process enhance me batch skills. In this instance you could look at each line of the processing. Many people don't know that DOS commands have help.

for /?
pushd /?
if /?
set /?

Sometimes the help is hard to understand, but I try to solidify my understand by trying out the command and echoing out the results. I don't have to do this as much now, but I'll still consult the for help to look at the extensions at the bottom of the help (%~n, etc...).
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.

All Courses

From novice to tech pro — start learning today.