Delete the last line in a Text File using a Bat

I have a number of users on my network who each have a text file(XML) that needs to have the last line of the file removed.

I want to use a batch file to get this done as quickly as possible.

Every users file last line contains "</profiles>" without the quotes.
Attached is a sample of a users XML file I will be working with.

Thanks
<profiles>
  <profile id="0000000003" showindexes="True">
    <name><![CDATA[Bi-Weekly IT Update Agendas]]></name>
    <drawer id="0000000006"><![CDATA[My Files]]></drawer>
    <idxs>
      <idx id="000000000T" mapping="0" listid="19" type="list"><![CDATA[WESLEY]]></idx>
      <idx id="000000000U" mapping="0" listid="154" type="list"><![CDATA[BI-WEEKLY IT UPDATE AGENDA]]></idx>
      <idx id="000000000V" mapping="3" listid="0" type="string"><![CDATA[IT UPDATE AGENDA]]></idx>
      <idx id="000000000W" mapping="4" listid="0" type="date"><![CDATA[]]></idx>
    </idxs>
  </profile>
</profiles>

Open in new window

RaynovacAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Steve KnightIT ConsultancyCommented:
well the easiest way to remove a specific line when it can be uniquely identified like this is to use a find command:

del textfile.old 2>NUL
rename textfile.xml textfile.old
type textfile.old | find /v /c "/profiles" > textfile.xml
rem del textfile.old

Any other processing of xml type files line by line with dos is going to be "interesting" due to the use of the < and > chars.

Steve
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Steve KnightIT ConsultancyCommented:
Sorry remove the /c there... thats to count the number of lines.  It should have been /I (case insensitive).
Steve
0
RaynovacAuthor Commented:
I get an error stating the system cannot find the file specified.

Let me set back and explain more fully what I am trying to do.

I have 3 files.
UserProfiles.xml (Located in the users Documents and settings)
profileBuilder.bat (Located on the server and the bat that I am trying to create)
DefaultProfiles.txt (text contains more xml)

I want to removing the last line of the xml file I originally posted and appending the text in the attached code snippet which is more XML which includes the </profiles> closing tag.

I have the appending code correct and I have all the paths to make sure that the user running the script is the only one that will have their XML file changed.

Hope this clarifies what I am trying to do.



   <profile id="2147483646" showindexes="True">
    <name><![CDATA[Test to HOW TO]]></name>
    <drawer id="0000000003"><![CDATA[Library]]></drawer>
    <idxs>
      <idx id="000000000D" mapping="0" listid="10" type="list"><![CDATA[IT]]></idx>
      <idx id="000000000E" mapping="0" listid="68" type="list"><![CDATA[HARDWARE & SOFTWARE]]></idx>
      <idx id="000000000F" mapping="0" listid="88" type="list"><![CDATA[HOW TO]]></idx>
      <idx id="000000000H" mapping="2" listid="0" type="date"><![CDATA[]]></idx>
    </idxs>
  </profile>
</profiles>

Open in new window

0
Big Business Goals? Which KPIs Will Help You

The most successful MSPs rely on metrics – known as key performance indicators (KPIs) – for making informed decisions that help their businesses thrive, rather than just survive. This eBook provides an overview of the most important KPIs used by top MSPs.

oBdACommented:
That works actually just fine with for /f. Simply save the script below as "RemoveLastLine.cmd" or Whatever.cmd.
The script expects the file to be shortened as first argument (enclose in double quotes if the path contains a space).
If you want to hardcode the file, you can do so in line 3.
A backup file will be created.
@echo off
setlocal enabledelayedexpansion
set File=%~1
if not exist "%File%" (
  echo Syntax: %~nx0 ^<Filename^>
  echo Removes the last line in ^<Filename^>
  goto :eof
)
for %%a in ("%File%") do (
  set BackupFile=%%~dpna.bak
  if exist "%%~dpna.bak" del "%%~dpna.bak"
  ren "%%~fa" "%%~na.bak"
)
set Line=
for /f "delims=" %%a in ('type "%BackupFile%"') do (
  if not "!Line!"=="" >>"%File%" echo !Line!
  set Line=%%a
)

Open in new window

0
RaynovacAuthor Commented:
It worked fine, it didn't occur to me to adjust the file names.  I had to adjust it a little to suit my needs but this is what I was pretty much looking for.

Thanks
0
Steve KnightIT ConsultancyCommented:
No problem, glad it helped... sorry wasn't around for a while there.

Steve
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Programming

From novice to tech pro — start learning today.