標籤

BAT (38) shell (34) Virtual Machine (33) Xubuntu (29) acfs (25) PHP (24) CentOS (21) Virtul Box (20) 編輯器 (17) 資料庫 (15) lubuntu (13) windows (13) CPP (12) ubuntu (12) chrome (11) laravel (10) Docker (9) Python (9) 5A88 (7) VMware (6) 資料結構 (6) Javascript (5) Node (5) Proxmox VE (5) 公告系統 (5) 程式積木 (5) Android Studio (4) ANN (3) OB2D2016x64 (3) Xoops (3) clonezilla (3) samba (3) 公文 (3) 其他 (3) 硬體 (3) API (2) Android (2) AppInvent2 (2) Html (2) Hyper-V (2) Nas (2) botnet (2) mbot (2) swift (2) wordpress (2) 樣板 (2) 防火牆 (2) AD的應用 (1) Ansible (1) Arduino (1) CSS (1) GitLab (1) HA Proxy (1) LegoEV3 (1) PowerShell (1) Scratch (1) VM (1) XenServer (1) kotlin (1) linuxmint (1) lxc (1)

2020年5月16日 星期六

只要會複製貼上,快速設定行政人員電腦的電腦名稱與固定ip

        行政人員電腦的電腦名稱與固定ip,通常都要一台一台手動設定。如果可以用C++程式讀取設定檔,自動產生相對應行政人員電腦的電腦名稱與固定ip的bat,那該有多好。那就可以事先規劃好,再讓程式自動產生。
使用方法:
1.檔案下載
2.下載後解壓縮,解壓密碼demo1234
3.變更資料夾內的config.txt

  
4.點選資料夾內的PcName2FixedIP_Generator.exe(注意:要以系統管理員身分執行)
5.產生 名稱與對應IP範圍 數目的BAT
6.將BAT檔放置在電腦(要設定行政人員電腦的電腦名稱與固定IP)
7.對BAT點兩下(注意:要以系統管理員身分執行),即完成設定
8.此時,電腦會自動重開機,重開機後電腦名稱就會變更。


 以下是程式寫法與相關說明:
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.

沒有留言:

張貼留言

在 Windows 10 x64 1909版,使用BAT快速安裝公文系統與人事服務網(自然人憑證)版

相關內容移往 https://skjhcreator.blogspot.com/2021/02/windows-10-x64-1909bat.html