问题描述
我把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 | 输入#号表示录入结束. |
因为,批处理文件中创建的变量在整个文件中都有效,所以就算子程序结束后,依然可以通过echo !inputStr!
这样的代码来访问录入的结果.
代码详解
开启变量延迟
1 | setlocal enabledelayedexpansion |
如果不开启,变量操作时结果可能不正确.
循环录入功能
1 | :nextLine |
上面的程序可从键盘录入数据,遇到单独的一行#
作为结束符.这样只能录入数据而已,是没有多行的效果的,
用换行符替换标记的字符
在之前录入的字符串中,我使用看#__#
这个字符作为分隔符了.下面的代码就是把这个分隔符,替换成换行符.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!
......