日期:2014-05-17  浏览次数:20993 次

bat做成服务后和bat直接执行的结果不一样,求大神指教!!!
用instsrv ServiceName C:\Windows\System32\srvany.exe 将bat注册成服务,在注册表里做了相关配置.

bat主要是做svn的全备份,我把bat做成服务之后启动服务执行之后发现文件夹下面没有dmp文件,求教原因!

set SVN_HOME="C:\VisualSVN Server\bin"
set SVN_ADMIN=%SVN_HOME%\svnadmin.exe
set SVN_LOOK=%SVN_HOME%\svnlook.exe
set SVN_REPOROOT=C:\Repos
set BACKUP_SVN_ROOT=C:\SVN_Backup
set Log_PATH=C:\SVN_Backup
setlocal EnableDelayedExpansion

cd %SVN_REPOROOT%

SET VAR_DATE=%date:~4,2%
dir /B /AD > DIRS
IF EXIST TEMP_DIRECTORY (
DEL /Q TEMP_DIRECTORY
)


FOR /F %%I IN (DIRS) do @if exist "%%I\conf\svnserve.conf" echo %%I >> TEMP_DIRECTORY

FOR /F %%i IN (TEMP_DIRECTORY) DO (
SET REPOS_NAME=%%i
SET IGNORE_FLAG=0
FOR /F %%J IN (%SVN_REPOROOT%\IgnoreList.txt) DO (
IF %%i==%%J SET IGNORE_FLAG=1
)
ECHO ignore flag is !IGNORE_FLAG!
IF !IGNORE_FLAG!==0 CALL :DUMP_REPOS
)

del /q DIRS
del /q TEMP_DIRECTORY

ECHO Successed.
GOTO :EOF

::==== Functions ====
:DUMP_REPOS
SET DUMP_FILE=%REPOS_NAME%_FullBackup_%VAR_DATE%.dmp

%SVN_ADMIN% dump ^"%REPOS_NAME%^" > %DUMP_FILE%

if %ERRORLEVEL% EQU 0 (
ECHO Dump Successful
) else (
ECHO Dump Failed
GOTO :EOF )

%SVN_LOOK% youngest %SVN_REPOROOT%\%REPOS_NAME%> "%Log_PATH%"\%REPOS_NAME%_last_revision.txt

if not exist "%BACKUP_SVN_ROOT%"\%REPOS_NAME% mkdir "%BACKUP_SVN_ROOT%\%REPOS_NAME%"

move %DUMP_FILE% "%BACKUP_SVN_ROOT%\%REPOS_NAME%"
if %ERRORLEVEL% EQU 0 (
ECHO Backup Successful
) else (
ECHO Backup Failed
GOTO :EOF )

------解决方案--------------------
先确认这个bat有没有运行。最简单的就是把bat内容替换成  ping 127.1 > C:\testlog.txt
如果能找到这个文件,说明bat有问题,如果找不到这个文件,说明压根没有运行,这时候需要考虑是不是登录身份有误(设置好该服务的正确的登录身份,在服务的属性里设置)