iT邦幫忙

2

求大大bat健檢

  • 分享至 

  • xImage

我的需求大概就是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 . . .                                
ZongXianLi iT邦研究生 5 級 ‧ 2023-11-13 18:58:23 檢舉
問題好像在
set "NASIPAddress=%%NASDIR%keyword%%%"
我執行起來是卡在這行導致下一行的 set"softwarePath=\\%NASIPAddress%\SW\TEST.exe" 出不來
我是建議你把每一個if判斷關鍵字的
set keyword 直接給NASDIR+KEYWORD 甚至給IP
因為你在此判斷就已經知道他要去哪個NASAddress了
不要到後面才用SET 的方式組合成一個變數再去拿NASDIR
@ZongXianLi 謝謝幫忙,試了更精簡化將 keyword直接給IP是有正常跑,本來想有條目的整理好看一點結果功夫不到位越寫越卓QAQ
ZongXianLi iT邦研究生 5 級 ‧ 2023-11-14 13:17:49 檢舉
我昨天試跑了好幾次 問題在 set "NASIPAddress=%%NASDIR%keyword%%%"
因為NASDIR是你自己放的字串並非變數 但你後面串了keyword這個變數
你在下一行去ECHO NASIPAddress就會看到問題在哪了
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
milim
iT邦新手 5 級 ‧ 2023-11-13 19:57:34

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"應該就可以了。

@milim 感謝幫忙,不過到最後還是會卡在一樓留言的所說的set "NASIPAddress=%%NASDIR%keyword%%%"會無法正確獲取%%NASDIR%keyword%%%內的正確數值,所以我決定還是精簡去除set的部分來解決

我要發表回答

立即登入回答