使用方法:
1.檔案下載
2.下載後解壓縮,解壓密碼demo1234
3.變更資料夾內的config.txt
4.點選資料夾內的PcName2FixedIP_Generator.exe(注意:要以系統管理員身分執行)
5.產生 名稱與對應IP範圍 數目的BAT
6.將BAT檔放置在電腦(要設定行政人員電腦的電腦名稱與固定IP)
7.對BAT點兩下(注意:要以系統管理員身分執行),即完成設定
8.此時,電腦會自動重開機,重開機後電腦名稱就會變更。5.產生 名稱與對應IP範圍 數目的BAT
6.將BAT檔放置在電腦(要設定行政人員電腦的電腦名稱與固定IP)
7.對BAT點兩下(注意:要以系統管理員身分執行),即完成設定
以下是程式寫法與相關說明:
1.固定ip的bat語法,請參考此篇
2.電腦名稱的bat語法與例子:
@echo off
//@echo off不印出指令列
set name="20170315T"
//set name= "" 設定電腦名稱,上行為設定電腦名稱為20170315T
wmic.exe ComputerSystem Where Name="%ComputerName%" call Rename Name="%name%"
//變更電腦名稱
shutdown -r -t 10
//在10秒內重開機
3.接下來,我們要利用上述BAT的內容,寫入C++程式,由程式去讀取config.txt,然後產生我們要的BAT檔案。
檔名:PcName2FixedIP_Generator.cpp
內容:
#include <iostream>
#include <fstream>
#define MAX_FILENAME 100
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
struct PcName2Ip {
char PcName[MAX_FILENAME];
int IP;
};
main() {
/*讀取設定檔的變數*/
char SNMmark[MAX_FILENAME];
int SNM[4];
char GWmark[MAX_FILENAME];
int GW[4];
char DNS01mark[MAX_FILENAME];
int DNS01[4];
char DNS02mark[MAX_FILENAME];
int DNS02[4];
char UImark[MAX_FILENAME];
struct PcName2Ip UI[MAX_FILENAME];
int Total_Ip;
/*讀取設定檔config.txt,並將設定寫入變數*/
ifstream fin("config.txt");
if(!fin) {
cout << "無法讀入檔案\n";
return 1;
}
/*讀取後,將設定寫入變數並呈現在螢幕上以供檢查*/
fin >> SNMmark;
fin >> SNM[0] >> SNM[1] >> SNM[2] >> SNM[3];
fin >> GWmark;
fin >> GW[0] >> GW[1] >> GW[2]>> GW[3];
fin >> DNS01mark;
fin >> DNS01[0] >> DNS01[1] >> DNS01[2]>> DNS01[3];
fin >> DNS02mark;
fin >> DNS02[0] >> DNS02[1] >> DNS02[2] >> DNS02[3];
fin >> UImark;
Total_Ip = 1;
//讀取名稱與對應IP
while(!fin.eof()) {
fin >> UI[Total_Ip].PcName >> UI[Total_Ip].IP;
Total_Ip++;
if (Total_Ip>=100) {
cout <<"\n警告!!讀取名稱與對應IP資料數超過100!!\n需修改原始碼MAX_FILENAME並重新編譯!!\n";
}
}
fin.close();
/*依名稱與對應IP範圍輸出檔名*/
char chFileName[MAX_FILENAME];
FILE * fp;
int ip[4];
ip[0]=GW[0];
ip[1]=GW[1];
ip[2]=GW[2];
for(ip[3]=1;ip[3]<=Total_Ip-1;ip[3]++) {
sprintf(chFileName, "%02d_%s_ip_%d_%d_%d_%d.bat",ip[3],UI[ip[3]].PcName,ip[0],ip[1],ip[2],UI[ip[3]].IP);
fp = fopen(chFileName, "w");
fprintf(fp, "@echo off\n");
fprintf(fp, "wmic.exe ComputerSystem Where Name=\"%%ComputerName%%\" call Rename Name=\"%s\" \n",UI[ip[3]].PcName);
fprintf(fp, "netsh interface ip set address \"區域連線\" static %d.%d.%d.%d %d.%d.%d.%d %d.%d.%d.%d\n",ip[0],ip[1],ip[2],UI[ip[3]].IP,SNM[0],SNM[1],SNM[2],SNM[3],GW[0],GW[1],GW[2],GW[3]);
fprintf(fp, "netsh interface ip set dns \"區域連線\" static %d.%d.%d.%d\n",DNS01[0],DNS01[1],DNS01[2],DNS01[3]);
fprintf(fp, "netsh interface ip add dns \"區域連線\" %d.%d.%d.%d\n",DNS02[0],DNS02[1],DNS02[2],DNS02[3]);
fprintf(fp, "shutdown -r -t 0");
fclose(fp);
}
return 0;
}
資料來源:
1.批次檔更改電腦名稱與設定IP
2.如何使用 shutdown.exe
3.BAT批次次指令: ECHO 的功能介紹
4.C++ - struct (C++軟體開發 - 結構 概念與實例)
5.
沒有留言:
張貼留言