我的需求大概就是N台電腦,想利用bat檢查電腦名稱的某兩個字元
再透過這兩個字元來決定接下來要跑的安裝程式要走哪一台NAS
@echo ON
@mode con cols=130 lines=40
@color 9f
@chcp 65001
rem 獲取電腦名稱
set computerName=%COMPUTERNAME%
rem 宣告NAS目錄及其對應的IP地址
set NASDIRCA=1.1.1.1
set NASDIRCB=2.2.2.2
set NASDIRCC=3.3.3.3
set NASDIRCD=4.4.4.4
set NASDIRCE=5.5.5.5
set NASDIRCF=6.6.6.6
rem 宣告電腦名稱中的關鍵字
set "keyword="
rem 檢查電腦名稱中的關鍵字
echo %computerName% | find /i "-CA" > nul
if %errorlevel% equ 0 (
set keyword=CA
)
echo %computerName% | find /i "-CB" > nul
if %errorlevel% equ 0 (
set keyword=CB
)
echo %computerName% | find /i "-CC" > nul
if %errorlevel% equ 0 (
set keyword=CC
)
echo %computerName% | find /i "-CD" > nul
if %errorlevel% equ 0 (
set keyword=CD
)
echo %computerName% | find /i "-CE" > nul
if %errorlevel% equ 0 (
set keyword=CE
)
echo %computerName% | find /i "-CF" > nul
if %errorlevel% equ 0 (
set keyword=CF
)
rem 如果找到匹配的關鍵字
if not "%keyword%"=="" (
rem 獲取NAS目錄對應的IP地址
set "NASIPAddress=%%NASDIR%keyword%%%"
rem 安裝軟體
set "softwarePath=\\%NASIPAddress%\SW\TEST.exe"
start "%softwarePath%"
)
pause
但是跑起來後變成最後面不代入QAQ
set "softwarePath=\\SW\TEST.exe"
start ""
有大大能大腿抱一下嗎?
Active code page: 65001
C:\Users\Admin\Desktop>rem 獲取電腦名稱
C:\Users\Admin\Desktop>set computerName=P15-CF1524
C:\Users\Admin\Desktop>rem 宣告NAS目錄及其對應的IP地址
C:\Users\Admin\Desktop>set NASDIRCA=1.1.1.1
C:\Users\Admin\Desktop>set NASDIRCB=2.2.2.2
C:\Users\Admin\Desktop>set NASDIRCC=3.3.3.3
C:\Users\Admin\Desktop>set NASDIRCD=4.4.4.4
C:\Users\Admin\Desktop>set NASDIRCE=5.5.5.5
C:\Users\Admin\Desktop>set NASDIRCF=6.6.6.6
C:\Users\Admin\Desktop>rem 宣告電腦名稱中的關鍵字
C:\Users\Admin\Desktop>set "keyword="
C:\Users\Admin\Desktop>rem 檢查電腦名稱中的關鍵字
C:\Users\Admin\Desktop>echo P15-CF1524 | find /i "-CA" 1>nul
C:\Users\Admin\Desktop>if 1 EQU 0 (set keyword=CA )
C:\Users\Admin\Desktop>echo P15-CF1524 | find /i "-CB" 1>nul
C:\Users\Admin\Desktop>echo P15-CF1524 | find /i "-CC" 1>nul
C:\Users\Admin\Desktop>echo P15-CF1524 | find /i "-CD" 1>nul
C:\Users\Admin\Desktop>if 1 EQU 0 (set keyword=CD )
C:\Users\Admin\Desktop>echo P15-CF1524 | find /i "-CE" 1>nul
C:\Users\Admin\Desktop>if 1 EQU 0 (set keyword=CE )
C:\Users\Admin\Desktop>echo P15-CF1524 | find /i "-CF" 1>nul
C:\Users\Admin\Desktop>if 0 EQU 0 (set keyword=CF )
C:\Users\Admin\Desktop>rem 如果找到匹配的關鍵字
C:\Users\Admin\Desktop>if not "CF" == "" (
rem 獲取NAS目錄對應的IP地址
set "NASIPAddress=%NASDIRCF%"
rem 安裝軟體
set "softwarePath=\\\SW\TEST.exe"
start ""
)
C:\Users\Admin\Desktop>pause
Press any key to continue . . .
Windows的Batch script似乎是一個比較lazy的直譯器,在(....)
裏面的變數取代一律是使用進入(...)
之前的變數值。
似乎是有特別的設定是可以加強直譯器在這一方面的問題解決。
但是針對目前原作的Script是可以做一些改變來解決這個問題
...略...
rem 如果找到匹配的關鍵字
set "NASIPAddress="
if not "%keyword%"=="" (
rem 獲取NAS目錄對應的IP地址
set "NASIPAddress=%%NASDIR%keyword%%%"
)
set "softwarePath="
if not "%NASIPAddress%" == "" (
set "softwarePath=\\%NASIPAddress%\SW\TEST.exe"
)
if not "%softwarePath=%" == "" (
rem 安裝軟體
start "%softwarePath%"
)
pause
其實,那個變數softwarePath
是多餘的,直接start "\\%NASIPAddress%\SW\TEST.exe"
應該就可以了。