Board logo

标题: [特效代码] 钉钉 svn钩子 为啥for循环不执行啊 [打印本页]

作者: wr_yys    时间: 2018-6-27 17:12     标题: 钉钉 svn钩子 为啥for循环不执行啊

set REPOS=%1
set REV=%2
set tttt=%date:~0,10% %time:~0,8%
for /f "tokens=1,2 delims=:" %%a in ('svnlook author -r %REV% %REPOS%') do (
    if not defined AUTHOR set AUTHOR=%%a
)
for /f "tokens=1,2 delims=:" %%a in ('svnlook dirs-changed %REPOS%') do (
    if not defined CHANGEDDIRS set CHANGEDDIRS=%%a
)
for /f "tokens=1,2 delims=:" %%a in ('svnlook log -r %REV% %REPOS%') do (
    if not defined MESSAGE set MESSAGE=%%a
)
set CONTENT="提交时间:%tttt% \n提交版本:%REV% \n作者:%AUTHOR%\n提交备注:%MESSAGE%\n修改目录:%CHANGEDDIRS% "
set str=cs1
for /f %%i in (%str%) do (
    D:\svndd\ddsvn.exe d23d09b22be3c4b0ff17fce576f3e5f53339261da68ab83642eca2233c2c9391 %CONTENT%
)

以前没接触过批处理,最后的这个for就是不执行,为啥啊
作者: wr_yys    时间: 2018-6-27 17:15

需求大概是某些目录下的svn更改要发送消息到钉钉,str就是这些目录,本来写的是for循环 用%%i去对比%CHANGEDDIRS% 一直不执行,去掉对比,直接for循环也不执行,为啥啊。。。搞了两天了
作者: Batcher    时间: 2018-6-27 17:33

set str=cs1
这里的cs1是什么?
你那个for命令的写法它会认为cs1是一个文件
作者: Batcher    时间: 2018-6-27 17:34

代码保存为 C:\test.bat
打开一个CMD窗口,执行命令:
C:\test.bat

这样可以看到详细的报错信息或者线索
作者: wr_yys    时间: 2018-6-28 09:52

set str=cs1
这里的cs1是什么?
你那个for命令的写法它会认为cs1是一个文件
Batcher 发表于 2018-6-27 17:33

set str=cs1,cs2,cs3  str表示一串字符串集合,for循环去取这些字段,然后和%CHANGEDDIRS%(修改目录)作比较,如果%CHANGEDDIRS%包含是在这些地址里的,那就执行发送消息的命令。
作者: wr_yys    时间: 2018-6-28 10:19

新问题
set str=cs1,cs2,dingdingcs
for %%i in (%str%) do (
    echo %CHANGEDDIRS%|findstr %%i >nul
    if %errorlevel% equ 0 D:\svndd\ddsvn.exe d23d09b22be3c4b0ff17fce576f3e5f53339261da68ab83642eca2233c2c9391 %errorlevel%%CHANGEDDIRS%%%i
)
钉钉里机器人发出来的消息
0cs2/cs1
0cs2/cs2
0cs2/dingdingcs
为啥都是0啊。。。
作者: wr_yys    时间: 2018-6-28 10:43

已经完成了,可以正常使用了。谢谢管理员的回答
set str=cs1,cs2,dingdingcs
for %%i in (%str%) do (
    echo %CHANGEDDIRS%|findstr /L "%%i" >nul
    if errorlevel 1 (echo %CHANGEDDIRS%) else (D:\svndd\ddsvn.exe d23d09b22be3c4b0ff17fce576f3e5f53339261da68ab83642eca2233c2c9391 %CONTENT%)
)




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2