如何在使用CFExecute与PsExec运行Git操作时,通过部分方式克服批处理文件的执行?

时间:2013-01-29 19:19:29

标签: git coldfusion batch-file psexec

我遇到了一个奇怪的问题,并尝试过许多不同的事情。

目标是让用户单击网页上的一个按钮,该按钮将在其他几台服务器上执行批处理文件。

我正在使用ColdFusion 8.当用户单击该按钮时,CFExecute启动PSExec.exe以在远程计算机上执行该文件。

摘自bat文件

cd c:\web\www >> \\firstmachine\c$\web\qa\html\RA\ra.log
git pull origin master >> \\firstmachine\c$\web\qa\html\RA\ra.log

cd c:\web\aaa >> \\firstmachine\c$\web\qa\html\RA\ra.log
git pull origin master >> \\firstmachine\c$\web\qa\html\RA\ra.log

当我从命令提示符运行它时,git正常运行并从www和aaa执行。日志文件显示一切按预期工作。

c:\web\qa\html\RA\PsExec.exe \\othermachine -u domain\adminaccount -p <password> c:\web\qa\html\RA\script.bat

当我使用CFExecute从CF运行相同的命令时,git只会对www进行操作而不是aaa。

<cfexecute name="c:\web\qa\html\RA\PsExec.exe" 
       variable="var" arguments="\\othermachine -u 
       domain\adminaccount -p <password> c:\web\qa\html\RA\script.bat" 
       timeout="50"> 
</cfexecute>

如果我换掉线路,git会拉动aaa而不是www。 在这些情况下,日志文件在第一次成功拉出后没有显示任何内容,就像进程中止一样,但我找不到任何其他异常的东西。

非常感谢任何想法!

2 个答案:

答案 0 :(得分:1)

您可以尝试使用CALL命令并将两个块都放在单独的标签中。从外部程序运行批处理文件时,需要指定exit / b [error_code]。如果批处理执行第一个git pull并将成功代码返回到调用它的内容,可能会发生什么。下面的结构只会在成功执行这两个部分后发送它。

SET _err_lvl=0
CALL :pull_www
CALL :pull_aaa

IF %_err_lvl% EQU 0 exit /b 0

:pull_www
cd c:\web\www >> \\firstmachine\c$\web\qa\html\RA\ra.log
git pull origin master >> \\firstmachine\c$\web\qa\html\RA\ra.log
IF %ERRORLEVEL% NEQ 0 SET _err_lvl=1
:end_pull_www
GOTO: eof

:pull_aaa
cd c:\web\aaa >> \\firstmachine\c$\web\qa\html\RA\ra.log
git pull origin master >> \\firstmachine\c$\web\qa\html\RA\ra.log
IF %ERRORLEVEL% NEQ 0 SET _err_lvl=1
:end_pull_aaa
GOTO: eof

答案 1 :(得分:0)

我最终取出批处理文件,并为每个操作使用单独的CFExecute命令。