batch-filewindows-scriptingvisual-sourcesafe-2005

parse the source safe history output and run the diff command


I am fairly new to writing batch scripts. I am trying to write a script file to achieve the following task.

I have a source safe command below to get the list of files changed between two dates

ss.exe history $/myproject -Vd04/01/2012~01/01/2012 -R  

The output of the above command is as follows

Building list for $/myproject.......................................................  
....................................................................................  
...................................  

***** AllPages.master  *****  
Version 67  
User: user1              Date: 1/12/12   Time: 1:08p  
Checked in $/myproject/websites/website1
Comment:  

***** AdminTSSetup.aspx.vb *****
Version 10
User: user2              Date: 1/12/12    Time: 1:09 p
Checked in $/myproject/websites/website1
Comment: 

With the output above, I want to read the file name (allpages.master, AdminTsSetup.aspx.vb) and version of each file from the output and run the following command

SS diff -DS <filename from output> -V<version from output - 1>~<version from output>

Basically, I was trying to compare the previous version with the current version for each file in the output.

Can some one please help?


Solution

  • This should give you what you asked for. But it seems like the diff command you specified is missing a reference to the project.

    This solution should work even if the file name contains spaces, !, ;, or any special characters like & or ^.

    @echo off
    setlocal disableDelayedExpansion
    for /f "delims=*" %%A in ('ss.exe history $/myproject -Vd04/01/2012~01/01/2012 -R ^| findstr /b "***** Version"') do (
      set "ln=%%A"
      setlocal enableDelayedExpansion
      if "!ln:~0,1!"==" " (
        for /f "eol=: delims=" %%F in ("!ln:~1!") do (
          endlocal
          set "file=%%~nxF"
        )
      ) else (
        for /f "tokens=2 delims= " %%V in ("!ln!") do (
          set /a "version1=%%V, version0=version1-1"
          ss.exe dif -DS "!file!" -V!version0!~!version1!
          endlocal
        )
      )
    )
    

    Here is a version that adds the project information from the "Checked in" line

    @echo off
    setlocal disableDelayedExpansion
    for /f "delims=*" %%A in ('ss.exe history $/myproject -Vd04/01/2012~01/01/2012 -R ^| findstr /b "***** Version Checked"') do (
      set "ln=%%A"
      setlocal enableDelayedExpansion
      if "!ln:~0,1!"==" " (
        for /f "eol=: delims=" %%F in ("!ln:~1!") do (
          endlocal
          set "file=%%~nxF"
        )
      ) else if "!ln:~0,1!"=="V" (
        for /f "tokens=2 delims= " %%V in ("!ln!") do (
          endlocal
          set /a "version1=%%V, version0=version1-1"
        )
      ) else (
        for /f "tokens=2* delims= " %%B in ("!ln!") do (
          endlocal
          set "proj=%%C"
          setlocal enableDelayedExpansion
          ss.exe dif -DS "!proj!/!file!" -V!version0!~!version1!
          endlocal
        )
      )
    )