0

私はバッチスクリプトを書くのはかなり新しいです。次のタスクを実行するためのスクリプトファイルを作成しようとしています。

2つの日付の間に変更されたファイルのリストを取得するためのソースセーフコマンドを以下に示します

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

上記のコマンドの出力は次のとおりです

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: 

上記の出力で、出力からファイル名(allpages.master、AdminTsSetup.aspx.vb)と各ファイルのバージョンを読み取り、次のコマンドを実行します。

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

基本的に、出力内の各ファイルについて、以前のバージョンと現在のバージョンを比較しようとしていました。

誰か助けてもらえますか?

4

2 に答える 2

3

これはあなたが求めたものをあなたに与えるはずです。しかし、指定したdiffコマンドにプロジェクトへの参照がないようです。

このソリューションは、ファイル名にスペース、!、;、または&や^などの特殊文字が含まれている場合でも機能するはずです。

@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
    )
  )
)

これは、「チェックイン」行からプロジェクト情報を追加したバージョンです。

@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
    )
  )
)
于 2012-01-13T16:13:15.897 に答える
0

for基本的に、ループと小さな状態が必要です。

@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2 delims= " %%i in ('ss.exe history $/myproject -Vd04/01/2012~01/01/2012 -R') do (
  if "%%i"=="*****" (
    rem a file name
    set "FileName=%%j"
  ) else (
    if "%%i"=="Version" (
      set Version=%%j
      set /a LastVersion=Version - 1
      ss diff -DS "!FileName!" -V!LastVersion!~!Version!
      set FileName=&set Version=&setLastVersion=
    )
  )
)

ちょっとうまくいくはずだと思います。

于 2012-01-13T20:53:14.727 に答える