標籤

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年8月10日 星期一

只要會用滑鼠點兩下,快速產生一堆的印表機一鍵完成驅動安裝.BAT


        由於學校的印表機種類很多。希望能在設定檔(config.txt)內,完成設定後。再於Driver資料夾內,放入印表機驅動程式。只要對PrinterAutoInstallBatGenerator.exe,用滑鼠點兩下。就能快速產生一堆的"印表機一鍵完成驅動安裝.BAT"。而不用針對校內各種印表機,自己手動修改印表機一鍵完成驅動安裝.BAT。

使用方法:
1.下載檔案下載
2.解壓縮,解壓密碼demo1234
3.修改設定檔config.txt
4.對資料夾內的PrinterAutoInstallBatGenerator.exe 點兩下
5.會產生 xxXXXX印表機_修正.bat
6.修改xxXXXX印表機_修正.bat,完成。
   (修改方法:BAT內容修改-H改為-h,-O改為-o。印表機型號$用空格取代。)

config.txt 內容(不斷增加組數[一組10行,以顏色區隔],就會多出組數的BAT。):

#印表機中文名稱
專任室印表機
#印表機IP
172.20.3.94
#印表機驅動位置(32位元)
x86\KOAYTJ__.INF
#印表機驅動位置(64位元)
x64\KOAYTJ__.INF
#印表機型號(空格請用$取代)
KONICA$MINOLTA$C554$PCL$Mono
#印表機中文名稱
導師室印表機
#印表機IP
172.20.3.93
#印表機驅動位置(32位元)
x86\KOAYTJ__.INF
#印表機驅動位置(64位元)
x64\KOAYTJ__.INF
#印表機型號(空格請用$取代)
KONICA$MINOLTA$C554$PCL$Mono

由範例產生的結果圖片如下


程式碼:

#include <iostream>
#include <fstream>
#define MAX_FILENAME 100
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;

struct PrinterNameAndIp {
 char PrinterChiName[MAX_FILENAME];
 char PrinterIP[MAX_FILENAME];
 char Printerx32Driver[MAX_FILENAME];
 char Printerx64Driver[MAX_FILENAME];
 char PrinterEngModel[MAX_FILENAME];
}; 
int main() {
/*讀取設定檔的變數*/
 char PrinterChiNameMark[MAX_FILENAME]; 
 char PrinterIPMark[MAX_FILENAME];
 char Printerx32DriverMark[MAX_FILENAME];
 char Printerx64DriverMark[MAX_FILENAME];
 char PrinterEngModelMark[MAX_FILENAME];
 struct PrinterNameAndIp PNAI[MAX_FILENAME];
 int Total_Printers;
/*讀取設定檔config.txt,並將設定寫入變數*/
    ifstream fin("config.txt"); 
    if(!fin) { 
        cout << "無法讀入檔案\n"; 
        return 1; 
    }
    Total_Printers = 1;
  while(!fin.eof()) { 
    fin >> PrinterChiNameMark;
    fin >> PNAI[Total_Printers].PrinterChiName; 
    fin >> PrinterIPMark;
    fin >> PNAI[Total_Printers].PrinterIP;
    fin >> Printerx32DriverMark;
    fin >> PNAI[Total_Printers].Printerx32Driver;
    fin >> Printerx64DriverMark;
    fin >> PNAI[Total_Printers].Printerx64Driver;
    fin >> PrinterEngModelMark;
    fin >> PNAI[Total_Printers].PrinterEngModel;
     Total_Printers++;
    if (Total_Printers>=100) {
      cout <<"\n警告!!讀取名稱與對應IP資料數超過100!!\n需修改原始碼MAX_FILENAME並重新編譯!!\n";
     }
  }   
    fin.close();

    char chFileName[MAX_FILENAME];
    FILE * fp;
    int i;
    for(i=1;i<Total_Printers;i++) { 
     sprintf(chFileName, "%02d%s_修正.bat",i,PNAI[i].PrinterChiName);
     fp = fopen(chFileName, "w");
     fprintf(fp, "@echo off\n");
     fprintf(fp, "set Printer_ip=%s\n",PNAI[i].PrinterIP);
     fprintf(fp, "echo \"要連接印表機用的ip為%Printer_ip%\"\n");        
     fprintf(fp, "set Printer_name2=\"%s\"\n",PNAI[i].PrinterChiName);
     fprintf(fp, "echo \"印表機顯示的名稱為%Printer_name2%\"\n");
     fprintf(fp, "set Printer_86_driver=\"%~dp0Drivers\\%s\"\n",PNAI[i].Printerx32Driver);
     fprintf(fp, "REM \"x86的驅動程式%Printer_86_driver%\"\n"); 
     fprintf(fp, "set Printer_64_driver=\"%~dp0Drivers\\%s\"\n",PNAI[i].Printerx64Driver);
     fprintf(fp, "REM \"x64的驅動程式%Printer_64_driver%\"\n");
     fprintf(fp, "set Printer_name=\"%s\"\n",PNAI[i].PrinterEngModel);
     fprintf(fp, "echo \"印表機型號%Printer_name%\"\n\n");
     fprintf(fp, "if \"%PROCESSOR_ARCHITECTURE%\" == \"x86\" goto x86\n");
     fprintf(fp, "if \"%PROCESSOR_ARCHITECTURE%\" == \"AMD64\" goto x64\n");
     fprintf(fp, "rem 針對windows有32跟64位元的判斷\n\n");
     fprintf(fp, ":x86\n");
     fprintf(fp, "echo \"作業系統為x86\"\n");
     fprintf(fp, "echo \"驅動程式所在路徑為 %Printer_86_driver%\"\n");
     fprintf(fp, "rem driver放在同目錄下,路徑用.\\來作相對路徑\n");
     fprintf(fp, "C:\\Windows\\system32\\cscript.exe C:\\Windows\\system32\\Printing_Admin_Scripts\\zh-TW\\prnport.vbs -a -r IP_%Printer_ip% -H %Printer_ip% -O raw -n 9100\n");
     fprintf(fp, "rem 新增ip連接阜,已經存在也沒差\n");
     fprintf(fp, "rundll32 printui.dll,PrintUIEntry /if /r IP_%Printer_ip% /f %Printer_86_driver% /b %Printer_name2%_%Printer_name% /m %Printer_name%\n");
     fprintf(fp, "rem 新增印表機,如果已經有同樣名字的也會新增,名字後面會多(複本1)\n");
     fprintf(fp, "echo \"列表機安裝完成...請按任意鍵結束..\"\n");
     fprintf(fp, "pause\n\n");
     fprintf(fp, ":x64\n");
     fprintf(fp, "echo \"作業系統為x64\"\n");
     fprintf(fp, "echo \"驅動程式所在路徑為 %Printer_64_driver%\"\n");
     fprintf(fp, "rem driver放在同目錄下,路徑用.\\來作相對路徑\n");
     fprintf(fp, "C:\\Windows\\system32\\cscript.exe C:\\Windows\\system32\\Printing_Admin_Scripts\\zh-TW\\prnport.vbs -a -r IP_%Printer_ip% -H %Printer_ip% -O raw -n 9100\n");
     fprintf(fp, "rem 新增ip連接阜,已經存在也沒差\n");
fprintf(fp, "rundll32 printui.dll,PrintUIEntry /if /r IP_%Printer_ip% /f %Printer_64_driver% /b %Printer_name2%_%Printer_name% /m %Printer_name%\n");
     fprintf(fp, "rem 新增印表機,如果已經有同樣名字的也會新增,名字後面會多(複本1)\n");
fprintf(fp, "echo \"列表機安裝完成...請按任意鍵結束..\"\n");
     fprintf(fp, "pause\n");
     fclose(fp);   
    }
printf("\n請記得對BAT內容修改-H改為-h,-O改為-o。印表機型號$用空格取代\n"); 
system("PAUSE");
        return 0; 
}

資料來源:
1.利用 BAT 一鍵完成印表機安裝驅動 

沒有留言:

張貼留言

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

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