2015-12-02 56 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");不必擔心這方面的問題。