问题描述
我把git命令写入到批处理文件中,这样我可以少打几个命令.但是在git commit -m 'xxxx'
这个命令中要求输入文本,这就需要这个批处理文件有输入功能,不过git commit -m 'xxxx'
这个命令本身可以输入多行数据.所以我需要批处理文件有多行输入的功能。
批处理 录入多行数据
callinput.bat
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| @echo off setlocal enabledelayedexpansion call :input echo ################################# echo !inputStr! pause goto :eof ::####################### 多行输入子程序input 开始 :input echo 输入#号表示录入结束. echo git commit -m ' :nextLine set /p message= if not "%message%"=="#" ( set "sum=%sum%#__#%message%" goto :nextLine ) else ( goto :done ) :done ::删除前面多加入的分隔符 set "sum=%sum:~4% ::输出处理后的字符 ::echo %sum% ::把分隔符`#__#`替换成换行符 set inputStr=!sum:#__#=^
! echo ' goto :eof ::####################### 多行输入子程序 结束
|
运行效果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 输入#号表示录入结束. git commit -m ' 1 2 3 4 5 # ' ################################# 1 2 3 4 5 请按任意键继续. . .
|
因为,批处理文件中创建的变量在整个文件中都有效,所以就算子程序结束后,依然可以通过echo !inputStr!
这样的代码来访问录入的结果.
代码详解
开启变量延迟
1
| setlocal enabledelayedexpansion
|
如果不开启,变量操作时结果可能不正确.
循环录入功能
1 2 3 4 5 6 7 8 9
| :nextLine set /p message= if not "%message%"=="#" ( set "sum=%sum%#__#%message%" goto :nextLine ) else ( goto :done ) :done
|
上面的程序可从键盘录入数据,遇到单独的一行#
作为结束符.这样只能录入数据而已,是没有多行的效果的,
用换行符替换标记的字符
在之前录入的字符串中,我使用看#__#
这个字符作为分隔符了.下面的代码就是把这个分隔符,替换成换行符.
1 2 3 4
| ::把分隔符`#__#`替换成换行符 set inputStr=!sum:#__#=^
!
|
要注意的是,感叹号之前的空行不要删掉,这样写是没有问题的.
还有就是想输出换行符,必须使用!inputStr!
这样的形式,使用%inputStr%
来访问时不会有换行符的.
应用到版本控制批处理文件中
首先调用上面的:input
子程序来读入数据,最后用读取到的数据,提交给git commit -m
即可,如下所示:
1 2 3 4 5 6 7
| ...... call :input echo ################################# echo !inputStr! git add . git commit -m !inputStr! ......
|