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

一个很纠结的批处理的问题,请高手帮忙!
我是windows 2008的系统,带域控,大家知道的2008系统有个权限控制问题,就是管理员和非管理员的问题,现在就是这个问题卡壳导致我写的批处理无法执行。

环境如下:
系统:windows 2008+域控

分区:C: D: E: F: ,其中E:是光驱,而F:是其它机器的共享映射到本机的盘符。

本机有一个系统服务,服务名称:“BT DB SERVER”,注意这个系统服务由于当初做软件开发的时候就定义成了这个样子,windows 标准系统服务名称是没有空格的,这个有,且不允许变更服务名称。

我的批处理任务是将“BT DB SERVER”服务停止,然后从F盘copy数据库文件到D盘,然后再恢复“BT DB SERVER”的启动。

问题来了:

1,不知道是什么原因,非管理员运行CMD,那么可以CD或者F:进入F盘,如果是以管理员身份运行CMD,则无法进入F盘,提示:“系统找不到指定的驱动器”。

2,大家知道,windows 2008下通过CMD启动和停止系统服务必须要管理员身份运行,而这样的话由于第1个原因我就又无法进入F:盘复制文件。

3,通过runas命令能以管理员或其他身份执行一条CMD命令,但是我的系统服务名称是“BT DB SERVER”,中间带空格,runas命令语法格式中引号不好嵌套,因此还是无法以管理员身份启动服务。

求解!!!!

附上批处理例子,当然我实际的批处理远不只只操作这点数据,否则我也不用去写批处理了,这里截取只是为了大家方便理解我的意图。

@echo off
@echo 按任意键开始……
@echo. 
pause>nul
net stop “BT DB SERVER”
@echo. 
@echo 服务停止完毕,按任意键开始复制数据库……
@echo. 
pause>nul
xcopy F:/server/db/*.* D:/server/Updata/db /h/y/f
@echo. 
@echo 复制完毕,按任意键开始启动服务……
pause>nul
net start “BT DB SERVER”

------解决方案--------------------
在批处理里,也映射下 F: 不就可以了?用完之后可以断开映射。
runas 里,引号是可以嵌套的,里面的引号前面加个 \ 即可;runas /? 帮助里应该有示例。
------解决方案--------------------
runas 必须要交互式手工输入密码吧。
为什么不能在批处理里也映射下 F: 呢?net use 命令可是支持命令行密码的