標籤

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年11月4日 星期三

只要會用滑鼠點兩下,快速設定電腦教室學生機chrome瀏覽器禁止瀏覽某些網頁與強制安全搜尋

文章移往

紀明村老師的運動檢錄系統程式碼研究心得(一)介接CloudSchool與mysql資料庫

   現在研究紀老師的運動檢錄系統程式碼,心中湧起幾個問題。希望能藉由原始碼解決心中的疑惑。由於紀老師使用Sqlite,但內容也有mysql pdo的語法。因此,希望能改寫成mysql的語法。
1.安裝mysql
$sudo apt-get install mysql-server -y
$sudo apt-get install mysql-client -y
$sudo apt-get install libmysqlclient-dev -y

2.安裝phpmyadmin
$sudo apt-get install phpmyadmin -y

一、如何跟CloudSchool的API介接?
       2.介接之後,要如何整理資料?

檔案名稱:ApiGetData.php
檔案內容:
<?php
// 3.雲端學籍系統內,學校的 API ID
$API_client_id = '學校的 API ID';

// 4.雲端學籍系統內,學校的 API 密碼
$API_client_secret = '學校的 API 密碼';

//取得API資料
$GetApiData = elps_API();

//印出API資料
PP($GetApiData);

function elps_API(){
global $API_client_id,$API_client_secret;

// =================================================
//    學生榮譽榜 (url: https://api.chc.edu.tw)
//    校務佈告欄 (url: https://api.chc.edu.tw/school-news)
//    同步學期資料 (url: https://api.chc.edu.tw/semester-data)
//    更改師生密碼 (url: https://api.chc.edu.tw/change-password)

// API NAME
$api_name = '/semester-data';
//$api_name = '/school-news';
// 更改師生密碼 (url: https://api.chc.edu.tw/change-password)

// API URL
$api_url = 'https://api.chc.edu.tw';
//: https://api.chc.edu.tw/school-news
// 建立 CURL 連線
$ch = curl_init();
// 取 access token
curl_setopt($ch, CURLOPT_URL, $api_url."/oauth?authorize");
// 設定擷取的URL網址
curl_setopt($ch, CURLOPT_POST, TRUE);
// the variable
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'client_id' => $API_client_id,
'client_secret' => $API_client_secret,
'grant_type' => 'client_credentials'
));

$data = curl_exec($ch);
$data = json_decode($data);

$access_token = $data->access_token;
$authorization = "Authorization: Bearer ".$access_token;

curl_setopt($ch, CURLOPT_URL, $api_url.$api_name);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization )); // **Inject Token into Header**
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$result = curl_exec($ch);
return $result;
}
/* 列印變數*/
function PP($a){
echo "<pre>";print_r($a);
echo "</pre>";exit;
}

?>

二、介接之後,如何取得的資料存入資料庫中?
   1.如何用pdo建立資料庫?
   2.如何用pdo建立資料表?

   1.如何用pdo建立資料庫?
檔案名稱:PdoCreateDatabase.php
檔案內容:
<?php
$school_code='教育部學校代碼';
$MySQL['Host']='localhost';
$MySQL['User']='資料庫使用者';
$MySQL['Pass']='資料庫密碼';
$MySQL['Db']='Sport109_'.$school_code;
try {
//建立資料庫
    $CONN =new PDO('mysql:host='.$MySQL['Host'], $MySQL['User'] ,$MySQL['Pass']);
    $SQL="CREATE DATABASE ".$MySQL['Db']." CHARACTER SET utf8 COLLATE utf8_general_ci;";
    $CONN->exec($SQL) or die($SQL);
    backe("!!資料庫 ".$MySQL['Db']." OK!!");
 }
 catch (Exception $e) 
 {
       backe("!!無法連結資料庫!!");
       //die("<center><h2>無法連結資料庫</h2></center>");

##################回上頁函式1#####################
function backe($value= "BACK"){
//echo head();
echo  "<meta charset='UTF-8'><br><br><CENTER>";
echo "<h4>--== 《系統訊息》 ==--</h4>";
echo "<div align=center onclick='history.back();' style='font-size:12pt;color:#A52A2A;'><b>";
echo $value;
echo "</b><BR></div><h5 onclick='history.back();'>--==  《按下後返回》 ==--</h5>";
exit;
}
?>

     2.如何用pdo建立資料表?
       (1).先檢查是否可從資料表取出一筆資料?
       (1).Y.取得出,表示有此資料表->不建立資料表
       (1).N.取不出,表示無此資料表->建立資料表
檔案名稱:PdoCreateTable.php
檔案內容:
<?php
$school_code='教育部學校代碼';
$MySQL['Host']='localhost';
$MySQL['User']='資料庫使用者';
$MySQL['Pass']='資料庫密碼';
$MySQL['Db']='Sport109_'.$school_code;
/*建立連結*/
try {
// for MySQL
$CONN =new PDO('mysql:host='.$MySQL['Host'].';dbname='.$MySQL['Db'], $MySQL['User'],$MySQL['Pass'], array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    }
catch (Exception $e) 
    {
       backe("!!無法連結資料庫!!");
       //die("<center><h2>無法連結資料庫</h2></center>");
 }
/* 建立 stud 資料表*/
        $SQL1="select * from `stud` limit 1";
        $SQL2="CREATE TABLE `stud`(
                      `id` INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
                      `stuid` VARCHAR(10) NOT NULL UNIQUE,
                      `stuname` TEXT NOT NULL,
                      `idclass` TEXT NOT NULL,
                      `cla` TEXT NOT NULL,
                      `seatnum` INT(10) DEFAULT '0',
                      `sex` TEXT NOT NULL,
                      `edukey` TEXT,
                      `created` TEXT,
                      `modify` TEXT
                      );";
                $rs=$CONN->query($SQL1);
                if (!$rs) {
                        $rs=$CONN->query($SQL2) or die($SQL2);
                } else {
                        backe('Had stud 資料表!');
                }
##################回上頁函式1#####################
function backe($value= "BACK"){
//echo head();
echo  "<meta charset='UTF-8'><br><br><CENTER>";
echo "<h4>--== 《系統訊息》 ==--</h4>";
echo "<div align=center onclick='history.back();' style='font-size:12pt;color:#A52A2A;'><b>";
echo $value;
echo "</b><BR></div><h5 onclick='history.back();'>--==  《按下後返回》 ==--</h5>";
exit;
}

?>

需要注意的是,同樣是建立資料表stud,建立資料表的語法會有些微不同
MYSQL語法:
CREATE TABLE `stud`(
  `id` INTEGER PRIMARY KEY,
  `stuid` VARCHAR(20) NOT NULL UNIQUE,
  `stuname` TEXT NOT NULL,
  `idclass` TEXT NOT NULL,
  `cla` TEXT NOT NULL,
  `seatnum` INTEGER DEFAULT '0',
  `sex` TEXT NOT NULL,
  `edukey` TEXT,
  `created` TEXT,
  `modify` TEXT
);

Sqlite語法:
CREATE TABLE `stud`(
  `id` INTEGER PRIMARY KEY,
  `stuid` TEXT NOT NULL UNIQUE,
  `stuname` TEXT NOT NULL,
  `idclass` TEXT NOT NULL,
  `cla` TEXT NOT NULL,
  `seatnum` INTEGER DEFAULT '0',
  `sex` TEXT NOT NULL,
  `edukey` TEXT,
  `created` TEXT,
  `modify` TEXT
);
      








2020年9月23日 星期三

只要會用滑鼠點兩下,一鍵設定電腦主機自動關機、重啟

文章移往

只要會用滑鼠點兩下,一鍵設定電腦主機內機敏性資料夾或檔案隱藏或加密

文章移往

用shell快速建立ubuntu 電腦主機(加裝無線網卡)或ubuntu筆電變成無線基地台分享wifi

        最近利用電腦教室教學生玩webduino,卻苦於電腦教室的無線AP效能不夠強。
無法讓每一位學生的webduino同時連上網。又不能讓學生自己用自己手機的無線網路。
那要如何做,才能讓每一位學生的webduino同時連上網?
        那電腦主機安裝雙系統,windows10 與ubuntu。當切換成ubuntu,又加裝Node-Red 成為Node-Red伺服器。
        因為電腦教室每一台電腦都有有線網路,只要再加裝無線網卡,只要會用滑鼠點兩下,一鍵設定完成。讓學生機變成自己專屬的無線基地台分享wifi,學生的webduino連上自己專屬的wifi。那麼要如何做,才能快速設定呢?


只要會用滑鼠點兩下,快速設定Windows10x64電腦主機(加裝無線網卡)或Windows10x64筆電變成無線基地台分享wifi

        最近利用電腦教室教學生玩webduino,卻苦於電腦教室的無線AP效能不夠強。
無法讓每一位學生的webduino同時連上網。又不能讓學生自己用自己手機的無線網路。
那要如何做,才能讓每一位學生的webduino同時連上網?
        那電腦主機安裝windows10 與ubuntu+Node-Red虛擬機。只要開啟虛擬機,webduino連上windows10 電腦主機的無線,再進入ubuntu+Node-Red虛擬機。
        因為電腦教室每一台電腦都有有線網路,只要再加裝無線網卡,只要會用滑鼠點兩下,快速設定完成。讓學生機變成自己專屬的無線基地台分享wifi,學生的webduino連上自己專屬的wifi。那麼要如何做,才能快速設定呢?

請用系統管理員執行
功用:建立虛擬無線基地台
檔名:MyWinApStart.bat
內容:
@echo off
REM ====== ssid後面接基地台名稱,key後面接8~64個字母的密碼 ======
set ssid=MyWinAP
set key=1234567890
REM =============================================================
netsh wlan set hostednetwork mode=allow ssid=%ssid% key=%key%
netsh wlan start hostednetwork
pause
exit

請用系統管理員執行
功用:移除虛擬無線基地台
檔名:MyWinApStop.bat
內容:
@echo off
netsh wlan stop hostednetwork
netsh wlan set hostednetwork mode=disallow
pause
exit

請用系統管理員執行
功用:顯示主控網路狀態
檔名:ShowMasterNetworkStatus.Bat
內容:
@echo off
netsh wlan show hostednetwork
PAUSE
netsh wlan show hostednetwork setting=security
PAUSE

如何使用?

一、建立虛擬無線基地台
(1)對MyWinApStart.bat按右鍵,出現下拉選單,選擇系統管理員執行。

(2)開啟網路與共用中心,可以看到MyWinAP的出現(區域連線* 4)->選擇[變更介面卡設定]
(3)選擇有網際網路的介面卡,以本例為[乙太網路]。
按滑鼠右鍵,出現下拉選單->內容->共用->區域連線* 4->確定。
二、使用行動載具->設定->WiFi ->連接 MyWinAP,密碼為1234567890。


三、移除虛擬無線基地台
MyWinApStop.bat按右鍵,出現下拉選單,選擇系統管理員執行。

四、該如何設定
那電腦主機安裝windows10 與ubuntu+Node-Red虛擬機。只要開啟虛擬機,webduino連上windows10 電腦主機的無線,再進入ubuntu+Node-Red虛擬機。

2020年8月26日 星期三

使用VirtualBox來實作5A88TNI大量佈署_利用16G的5A88佈署另一台虛擬機(二)

感恩頂番國小李清展老師的指導
3.現在要來實作後續:




 資料來源:


利用shell來快速設定前瞻計畫中75吋大電視的網路設定(主機名稱、IP、閘道、子網路遮罩、DNS)

        由於學校採用前瞻計畫的嵌入式黑板+75吋大電視。75吋大電視內的系統為Android。請廠商設定大電視內部的網路設定。但是廠商有時會為了便利,直接設定DHCP。身為網管,當然希望
能夠取得主機名稱、IP與MAC。
但來不及實作,先預留空間與資料來源。等有空在來實作看看。

2020年8月16日 星期日

C++程式,九宮格問題 或是 三階魔方陣

在下列的九宮格中,填入1~9,使得每個行與列,以及兩個主對角線的數字和都一樣。

一、逐步對k=1~9,每一步都列出來。
二、整理k=1~9為if elseif elseif else 的程式碼。

一、逐步對k=1~9,每一步都列出來。
CPP 程式碼:
檔名:NXN01.cpp
檔案內容:
#include <iostream>
#include <math.h>
#define N 3
using namespace std;

int main() {
int A[N][N]={0};
int i,j,Nexti,Nextj,k;
for (j=0;j<N;j++) {
for (i=0;i<N;i++){
cout << A[i][j] <<' ';
}
cout <<endl;
}
cout <<endl;
k=1;
i=0;
j=floor(N/2);
A[i][j]=k;
k=2;
i=i-1;
j=j-1;
if (i<0) {
i=N-1;
}
A[i][j]=k;
k=3;
i=i-1;
j=j-1;
if (j<0) {
j=N-1;
}
A[i][j]=k;
k=4;
i=i-1;
j=j-1;
if (A[i][j]!=0) {
i=i+2;
j=j+1;
}
A[i][j]=k;
k=5;
i=i-1;
j=j-1;
A[i][j]=k;

k=6;
i=i-1;
j=j-1;
A[i][j]=k;

k=7;
i=i-1;
j=j-1;
if (i<0 && j<0) {
i=i+2;
j=j+1;
}
A[i][j]=k;

k=8;
i=i-1;
j=j-1;
if (j<0) {
j=N-1;
}
A[i][j]=k;

k=9;
i=i-1;
j=j-1;
if (i<0) {
i=N-1;
}
A[i][j]=k;
for (j=0;j<N;j++) {
for (i=0;i<N;i++){
cout << A[i][j] <<' ';
}
cout <<endl;
}
}
執行結果:

二、整理k=1~9為if elseif elseif else 的程式碼。
CPP 程式碼:
檔名:NXN02.cpp
檔案內容:
#include <iostream>
#include <math.h>
#define N 3
using namespace std;

int main() {
int A[N][N]={0};
int i,j,Nexti,Nextj,k;
for (j=0;j<N;j++) {
for (i=0;i<N;i++){
cout << A[i][j] <<' ';
}
cout <<endl;
}
cout <<endl;
k=1;
i=0;
j=floor(N/2);
A[i][j]=k;
for (k=2;k<=N*N;k++) {
i=i-1;
j=j-1;
    if (i<0 && j>=0) {
    i=N-1;
    } else if (j<0 && i>=0) {
    j=N-1;
    } else if (i<0 && j<0) {
i=i+2;
        j=j+1;
    } else if (A[i][j]!=0) {
    i=i+2;
    j=j+1;
    } 
A[i][j]=k;
}
for (j=0;j<N;j++) {
for (i=0;i<N;i++){
cout << A[i][j] <<' ';
}
cout <<endl;
}
}
 執行結果:


2020年8月13日 星期四

以Brother T910DW為例,如何修改一鍵完成印表機安裝驅動BAT,來配合所屬單位的印表機

前篇:

       今天針對上一篇利用 BAT 一鍵完成印表機安裝驅動,進行說明。

範例檔案,解壓密碼demo1234

步驟:

1.取得印表機驅動程式,以Brother T910DW為例,要找到INF檔。

2.將解壓縮後的資料夾gdi,放入AutoInstall資料夾內

3.取得BAT所需的資料

詳細說明:

1. 取得印表機驅動程式,以Brother T910DW為例,要找到INF檔




2.將解壓縮後的資料夾gdi,放入AutoInstall資料夾內

注意:放入AutoInstall資料夾內的路徑為gdi\,要寫入BAT

3.取得BAT所需的資料

批次檔內容:
@echo off
set Printer_ip=依照學校需求規劃
echo "要連接印表機用的ip為Printer_ip%"
set Printer_name2="依照學校需求規劃"
echo "印表機顯示的名稱為%Printer_name2%"
set Printer_86_driver="%~dp0AutoInstall\gdi\BRPRI17C.INF"
REM "x86的驅動程式%Printer_86_driver%"
set Printer_64_driver="%~dp0AutoInstall\gdi\BRPRI17C.INF"
REM "x64的驅動程式%Printer_64_driver%"
set Printer_name="Brother MFC-T910DW Printer"
echo "印表機型號%Printer_name%"
共有三項要填入:
(1)gdi\如何取得?
(2)BRPRI17C.INF如何取得?
(3)Brother MFC-T910DW Printer如何取得?

詳細說明如下:

(1)gdi\如何取得?即放入AutoInstall資料夾內的路徑為gdi\

(2)BRPRI17C.INF如何取得?




(3)Brother MFC-T910DW Printer如何取得?

資料來源:

1.利用 BAT 一鍵完成印表機安裝驅動


2020年8月12日 星期三

只要會對BAT用滑鼠點兩下,快速設定連結網頁

20200812

檔案下載


檔名:HtmlGenerator.bat

內容:

@echo off

REM ----------------以下為設定檔-可修改--------------------------

REM -以下為讀取檔案

set FileInName=config.txt

REM -以下為產出檔案

set FileOutName=index.html

REM -以下為網頁標題

set HtmlTitle=課程連結頁面

REM ----------------以下為程式碼-不可修改--------------------------- 

echo "<html>" > "%FileOutName%"

echo "<head>"  >> "%FileOutName%"

echo "<title>%HtmlTitle%</title>"  >> "%FileOutName%"

echo "<style type=text/css>"  >> "%FileOutName%"

echo "<!--"  >> "%FileOutName%"

echo ".style {font-size: 36px}"  >> "%FileOutName%"

echo "-->"  >> "%FileOutName%"

echo "</style>"  >> "%FileOutName%"

echo "<body>"  >> "%FileOutName%"

echo "<center>"  >> "%FileOutName%"

for /f "tokens=1,2 delims= " %%a in (%FileInName%) do (

   echo  "<br><span class='style'><a href='%%b' class='style2' target='_blank'>%%a</a></span><br>"  >> "%FileOutName%"

)

echo "</center>"  >> "%FileOutName%"

echo "</body>"  >> "%FileOutName%"

echo "</html>"  >> "%FileOutName%"


設定檔案
檔名:config.txt
內容:
伸港國中 http://www.skjh.chc.edu.tw/xoops256skjh/
教務部雲端電郵 https://mail.edu.tw/edumail.html
彰化GSuite https://gsuite.chc.edu.tw/
校務雲端系統 https://cloudschool.chc.edu.tw/
教師在職進修網 https://www4.inservice.edu.tw/
Scratch3.0線上版 https://scratch.mit.edu/projects/editor/?tutorial=getStarted
生科_三視圖 http://163.22.72.1/teach/draw/


資料來源:

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版本的VirtualBox虛擬機安裝WampServer,並可在HOST裡瀏覽其首頁

 1.下載

下載網頁位置

或是上圖wampserver3.2.3_x64.exe下載位置

此外,在Windows 10 x64 1909版本中,還需要先安裝VC11VC13VC16

現在將上述所需軟體整合成一個壓縮檔

2.安裝

3.設定中文

4.設定


資料來源:

1.[PHP網站建立教學][1] – 安裝伺服器 WampServer

2.[轉] WampServer 用自已電腦架站

3.執行遊戲或程式出現缺少MSVCP120.dll該怎辦?

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

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