我编写了一个批处理脚本,用于从文件中提交我的GIT存储库。此脚本首先询问我是否确定要提交暂存更改然后查找changelog文件并在找不到时停止,如果找到,则提交完成,创建更改日志的备份并且更改日志为清空。
现在我的问题是我第一次在命令提示符中调用它时会询问我是否真的要提交,而且无论我回答什么,它都会在此之后停止(不完全正确,它会执行{{1命令,没有写任何其他内容,就像我没有输入y或Y)。我第一次在SAME命令提示符下运行它,它按预期工作。现在从来没有打破任何东西,但每次运行它两次是有点无用的,很可能是一个错误和可避免的,所以任何帮助是值得赞赏的;)
这是我的剧本
PAUSE
提前致谢:)
答案 0 :(得分:4)
请阅读here原因。
您可以启用延迟扩展
@echo off
setlocal enabledelayedexpansion <<<<<< HERE
.....
if /i "%isOk%"=="Y" (
echo "Looking for changelog"
set "filter=%~dp0\..\changelog\changelog.txt"
for %%A in ("!filter!") do if %%~zA==0 ( <<<<<< AND HERE
....
或更简单的选项,将filter
变量的定义移出if
命令。
....
set "filter=%~dp0\..\changelog\changelog.txt"
set /p "isOk=Do you really want to commit the staged work? (Y/N)"
if /i "%isOk%"=="Y" (
echo "Looking for changelog"
for %%A in ("%filter%") do if %%~zA==0 (
....
为什么它在第二轮运行?第一次执行批处理时,由于未看到更改的值,因此进程失败,但由于您没有使用setlocal
来保护环境免受更改,因此定义了变量并将值存储到其中,因此,在第二次运行中,使用前一个值并且代码可以正常工作。