標籤

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月20日 星期三

只要會複製貼上,快速設定行政人員電腦的電腦名稱與固定ip_修正版01

檔案下載,解壓密碼demo1234
修正理由:
1.使用AngryIPScanner掃192.168.25.0/24 的網段,由於電腦名稱使用中文名稱,名稱會出現亂碼。為能正確顯示,電腦名稱改用英文名稱。

2.上一版利用C++程式產生的bat來一鍵設定行政人員電腦的電腦名稱與固定ip
   希望能保留中文檔案名稱。

3.Windows 10 、Windows8.1與Windows 7 的網路名稱不同。需要在 config.txt 增加位置,來因應不同版本 的Windows。
Windows 10的網路名稱為Ethernet0

Windows8.1的網路名稱為乙太網路

Windows 7 的網路名稱為區域網路


修正程式碼如下:

檔名:PcNameEng2FixedIP_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];
char EngPcName[MAX_FILENAME];
int IP;
}; 
main() {

/*讀取設定檔的變數*/
        char NNmark[MAX_FILENAME]; 
        char NN[MAX_FILENAME]; 
        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 >> NNmark;
fin >> NN; 
        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].EngPcName >> 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]].EngPcName);        
fprintf(fp, "netsh interface ip set address \"%s\" static %d.%d.%d.%d %d.%d.%d.%d %d.%d.%d.%d\n",NN,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 \"%s\" static %d.%d.%d.%d\n",NN,DNS01[0],DNS01[1],DNS01[2],DNS01[3]);
fprintf(fp, "netsh interface ip add dns \"%s\" %d.%d.%d.%d\n",NN,DNS02[0],DNS02[1],DNS02[2],DNS02[3]);
fprintf(fp, "shutdown -r -t 0");
fclose(fp);
}
    return 0; 
}

檔案下載
最後執行結果ok,如下圖


資料來源:
1.利用C++程式產生的bat來一鍵設定行政人員電腦的電腦名稱與固定ip

沒有留言:

張貼留言

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

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