2015-12-02 152 views
0

我正在开发一个小型私人项目,一个让我控制什么时候关闭PC的程序(我已经知道有很多工具在那里,但我仍然想编程它)C/C++:创建和执行批处理

截至目前为止,我一直在命令菜单中使用命令行:shutdown -s -t [x](x表示剩下的秒数)。

现在,我的程序应该自己计算剩余秒数,写入批处理文件&执行批处理文件。

我已经得到了它的所有工作,除了它应该执行批处理的部分。

它只是打开一个命令窗口,批处理的行显示在一个无限循环(没有实际执行该行,只是打印它)。

即使我只是创建批处理文件并使用我的鼠标在文件夹中执行它,它仍然不会执行命令行,只是在无限循环中显示它。

-

void create_batch(double sec){ 

ofstream batch; 

batch.open("shutdown.bat", ios::out); 
batch << "shutdown -s -t "<<sec; 
batch.close(); 

} 

int main(){ 

time_t now; 
struct tm shut_down; 
double seconds; 

int hh; 
int mm; 

cout << "Enter hour you want to shutdown<hh>\t: "; 
cin >> hh; 
cout << "Enter minute you want to shutdown<mm>\t: "; 
cin >> mm; 

time(&now); // get current time 
shut_down = *localtime(&now); // set shutdown date to today 

shut_down.tm_hour = hh; 
shut_down.tm_min = mm; 

seconds = difftime(mktime(&shut_down), now); 

create_batch(seconds); 

system("shutdown.bat"); 
} 

感谢提前所有帮助。

+2

为什么不直接运行shutdown命令而不写一个批处理文件并运行它? –

+1

你打电话给你的C++程序“shutdown.exe”吗?如果是这样,那就是你的问题。 –

回答

0

首先,什么是shutdown.bat?确保它确实包含你的想法。

其次,您是在PATH中写shutdown.bat的地方吗?如果不是,则需要更改PATH或将完整路径传递到system()

第三,.BAT文件应该与CMD.EXE关联,但可以更改。确保关联没有改变。

第四,我认为system()会使用文件关联,但它可能不会。 (我没有在Windows上使用过这个API)。你总是可以说system("CMD /C shutdown.bat");不必担心这方面的问题。