我是编写批处理脚本的新手。我正在尝试编写脚本文件来完成以下任务。
我在下面有一个源安全命令,用于获取两个日期之间更改的文件列表
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>
基本上,我试图将先前版本与输出中每个文件的当前版本进行比较。
有人可以帮忙吗?
答案 0 :(得分:3)
这应该可以满足您的要求。但是,您指定的diff命令似乎缺少对项目的引用。
即使文件名包含空格,!,;或任何特殊字符(例如&amp;),此解决方案也应该有用。或^。
@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
)
)
)
这是一个从“Checked in”行
添加项目信息的版本@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
)
)
)
答案 1 :(得分: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=
)
)
)
我猜应该有点工作。