bat脚本 svn更新和提交(可直接使用)
脚本内容
@echo off
CHCP 936
title svn批量更新和提交
@echo ******************************************************
@echo svn批量更新和提交
@echo work_dirs 需要更新的目录路径,路径之间用空格隔开
@echo *****************************************************
set path_dir=E:\h5\branch\
set on_dir=%path_dir%pack_server
set work_dirs=%path_dir%rxxx_publish\server
set curr_dir=%cd%
set log_dir=%curr_dir%\log
set log_file=%log_dir%\%date:~0,4%%date:~5,2%%date:~8,2%.txt
set curr_time=%time:~0,2%:%time:~3,2%:%time:~6,2%
svn update "%on_dir%"
echo "更新源目录-----:"%on_dir%
echo %curr_time% %%on_dir" 更新源目录">> %log_file%
if not exist %log_dir% (
md %log_dir%
)
setlocal enabledelayedexpansion
for %%c in (%work_dirs%) do (
echo !curr_time! %%c" ========开始">> %log_file%
svn update "%%c"
rd /s /Q %%c
md %%c
xcopy %on_dir% %%c /e /q /y
echo "xcopy:"%%c
cd /d %%c
for /f "eol=M tokens=1,2 delims= " %%i in ('svn st') do (
if "%%i" == "?" (
svn add "%%j"
)else if "%%i" == "A" (
svn add "%%j"
)else if "%%i" == "!" (
svn del "%%j"
)
)
svn commit -m "周期脚本版本合并" "%%c"
set curr_time=!time:~0,2!:!time:~3,2!:!time:~6,2!
echo !curr_time! %%c "完成!!">> %log_file%
echo "完成========:"%%c
)
pause
FOR /F 格式: 详细说明请到https://blog.csdn.net/davidhsing/article/details/1996180查看
FOR /F ["options"] %%i IN (file) DO command
FOR /F ["options"] %%i IN ("string") DO command
FOR /F ["options"] %%i IN ('command') DO command
file代表一个或多个文件
string 代表字符串
command代表命令
["options"] 可选
注解 for /f参数
1、delims=后面的字符的意识是,将文本每一行的内容以delims=后面的字符分割成若干列.
“delims=, . / " 意思就是把111,222.333 444/555以,./和空格(不分先后)分成了5列.注意代码中/和"后面有个空格, 显示结果是 111 222 333 444 555
2、tokens=1,2 表示当前行按delims分割后的第1,2列值,定义 %%a 则第2列为%%b(*表示全部列)
3、eol=M 表示忽略带M的行
cd切换分区目录
cd /d path
关于结尾closeonend:1类型解释:
/closeonend:0 不自动关闭对话框
/closeonend:1 如果没发生错误则自动关闭对话框
/closeonend:2 如果没发生错误和冲突则自动关闭对话框
/closeonend:3如果没有错误、冲突和合并,会自动关闭
/closeonend:4如果没有错误、冲突和合并,会自动关闭
常见svn命令行说明:
命令 描述
- :about 显示关于对话框。如果没有给命令也会显示。
- :log 打开日志对话框,/path 指定了显示日志的文件或目录,另外还有三个选项可以设置: /startrev:xxx、/endrev:xxx和/strict
- :checkout 打开检出对话框,/path指定了目标路径,而/url制定了检出的URL。
- :import 打开导入对话框,/path 指定了数据导入路径。
- :update 将工作副本的/path更新到HEAD,如果给定参数/rev,就会弹出一个对话框询问用户需要更新到哪个修订版本。为了防止指定修订版本号/rev:1234的对话框,需要选项/nonrecursive和/ignoreexternals。
- :commit 打开提交对话框,/path 指定了目标路径或需要提交的文件列表,你也可以使用参数 /logmsg 给提交窗口传递预定义的日志信息,或者你不希望将日志传递给命令行,你也可以使用 /logmsgfile:path,path 指向了保存日志信息的文件。为了预先填入bug的ID(如果你设置了集成bug追踪属性),你可以使用/bugid:"the bug id here"完成这个任务。
- :add 将/path的文件添加到版本控制 。
- :revert 恢复工作副本的本地修改,/path说明恢复哪些条目。
- :cleanup 清理中断和终止的操作,将工作副本的/path解锁。
- :resolve 将/path指定文件的冲突标示为解决,如果给定/noquestion,解决不会向用户确认操作。
- :repocreate 在/path创建一个版本库。
- :switch 打开选项对话框。/path 指定目标目录。
- :export 将/path的工作副本导出到另一个目录,如果/path指向另一个未版本控制目录,对话框会询问要导出到/path的URL。
- :merge Opens the merge dialog. The /path specifies the target directory. For merging a revision range, the following options are available: /fromurl:URL, /revrange:string. For merging two repository trees, the following options are available: /fromurl:URL, /tourl:URL, /fromrev:xxx and /torev:xxx. These pre-fill the relevant fields in the merge dialog.
- :mergeall Opens the merge all dialog. The /path specifies the target directory.
- :copy Brings up the branch/tag dialog. The /path is the working copy to branch/tag from. And the /url is the target URL. You can also specify the /logmsg switch to pass a predefined log message to the branch/tag dialog. Or, if you don't want to pass the log message on the command line, use /logmsgfile:path, where path points to a file containing the log message.
- :settings 打开设置对话框。
- :remove 从版本控制里移除/path中的文件。
- :rename 重命名/path的文件,会在对话框中询问新文件,为了防止一个步骤中询问相似文件,传递/noquestion。
- :diff Starts the external diff program specified in the TortoiseSVN settings. The /path specifies the first file. If the option /path2 is set, then the diff program is started with those two files. If /path2 is omitted, then the diff is done between the file in /path and its BASE. To explicitly set the revision numbers use /startrev:xxx and /endrev:xxx. If /blame is set and /path2 is not set, then the diff is done by first blaming the files with the given revisions.
- :showcompare
- Depending on the URLs and revisions to compare, this either shows a unified diff (if the option unified is set), a dialog with a list of files that have changed or if the URLs point to files starts the diff viewer for those two files.
- The options url1, url2, revision1 and revision2 must be specified. The options pegrevision, ignoreancestry, blame and unified are optional.
- :conflicteditor Starts the conflict editor specified in the TortoiseSVN settings with the correct files for the conflicted file in /path.
- :relocate 打开重定位对话框,/path指定了重定位的工作副本路径。
- :help 打开帮助文件
- :repostatus 打开为修改检出对话框,/path 指定了工作副本目录。
- :repobrowser Starts the repository browser dialog, pointing to the URL of the working copy given in /path or /path points directly to an URL. An additional option /rev:xxx can be used to specify the revision which the repository browser should show. If the /rev:xxx is omitted, it defaults to HEAD. If /path points to an URL, the /projectpropertiespath:path/to/wc specifies the path from where to read and use the project properties.
- :ignore 将/path中的对象加入到忽略列表,也就是将这些文件添加到 svn:ignore 属性。
- :blame
- 为 /path 选项指定的文件打开追溯对话框。
- 如果设置了 /startrev 和 /endrev 选项,不会显示询问追溯范围对话框,直接使用这些选项中的版本号。
- 如果设置了 /line:nnn 选项,TortoiseBlame 会显示指定行数。
- 也支持 /ignoreeol,/ignorespaces 和 /ignoreallspaces 选项。
- :cat 将/path指定的工作副本或URL的文件保存到/savepath:path,修订版本号在/revision:xxx,这样可以得到特定修订版本的文件。
- :createpatch 创建/path下的补丁文件。
- :revisiongraph 显示/path目录下的版本变化图。
- :lock Locks a file or all files in a directory given in /path. The 'lock' dialog is shown so the user can enter a comment for the lock.
- :unlock Unlocks a file or all files in a directory given in /path.
- :rebuildiconcache Rebuilds the windows icon cache. Only use this in case the windows icons are corrupted. A side effect of this (which can't be avoided) is that the icons on the desktop get rearranged. To suppress the message box, pass /noquestion.
- :properties 显示 /path 给出的路径之属性对话框。