前篇:利用 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");
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 一鍵完成印表機安裝驅動
沒有留言:
張貼留言