批處理(bat)腳本,可以實現類似Linux/Unix下的alias的作用

 

之前我寫過一個python3的腳本可以實現alias的作用,後來想想畢竟Python不是所有人都會裝,那個腳本的適用性也就受到了限制,

今天我用批處理腳本重寫了一下那個alias的腳本,如下(共五個文件readini.bat,open.bat,gotopath.bat,commandlist.ini,help.txt):

你可以將腳本放到一個文件夾中,在桌面上建立open.bat的快捷方式,

郵件單擊快捷方式,選擇屬性,爲快捷方式添加快捷鍵:Ctrl+Alt+R

這樣無論在什麼窗口下,同時按住Ctrl+Alt+R,open.bat就會執行。

 

readini.bat內容如下:

rem @echo off & setlocal enabledelayedexpansion
rem echo 參數個數: %0 %1 %2 %3
set name1145264=
set namelist1145264=
set param1145264=
set paramlist1145264=
FOR /F "eol=; tokens=1* usebackq delims==" %%i IN (%1) do (
    rem echo %%i %%j
    set p=%%i
    rem echo p=!p!
    rem echo 取字符!p! !p:~0,1!  !p:~-1!  !p:~1,-1!
    if "!p:~0,1!"=="[" (
        if "!p:~-1!"=="]" (
            rem @echo 條件!p:~1,-1!
            set name1145264=!p:~1,-1!
            set namelist1145264=!namelist1145264!,!name1145264!
        )        
    )
    rem echo name1145264=!name1145264! namelist1145264=!namelist1145264! paramlist1145264=!paramlist1145264! 輸入 %2
    if "[!name1145264!]" NEQ "%%i" (
        if "!name1145264!"=="%2" (
        set paramlist1145264=!paramlist1145264!,%%i
        if "%3"=="%%i" (
            set param1145264=%%j
        )
    )
  )
)
    rem echo ------------------------
    rem echo name1145264=!name1145264!
set return=
if "%2" EQU "" (
    rem 名稱列表
    rem echo "!namelist1145264:~1!"
    set return=!namelist1145264:~1!
    if "!namelist1145264!" NEQ "" (
        set return=!namelist1145264:~1!
    ) else (
        set return= 
    )
) else (
    if "%3" EQU "" (
        rem 屬性列表
        rem echo "!paramlist1145264!"
        if "!paramlist1145264!" NEQ "" (
            set return=!paramlist1145264:~1!
        )else (
            set return=
        )
    ) else (
        rem 屬性值
        rem echo "!param1145264!"
        set return=!param1145264!
        if "!param1145264!" NEQ "" (
             set return=!param1145264!
        )else (
            set return=
        )
    )
)
set name1145264=
set namelist1145264=
set param1145264=
set paramlist1145264=
set p=
rem @echo on

open.bat內容如下:

@echo off & setlocal enabledelayedexpansion
set filename=commandlist.ini
set myname=0
:loop1
set myname=
set /P myname=請輸入簡寫:
rem echo 您輸入的是%myname% 
if "%myname%"=="" (
    rem echo "輸入爲空,請重新輸入"
    goto :loop1
) else (
    if  "%myname%"=="help" (
        type help.txt
        echo .
        goto :loop1
    )
    if  "%myname%"=="quit" (
        exit 1
    )
    if  "%myname%"=="show" (
        call readini %filename%
        set p=!return!
        for %%i in (!p!) do (
            call readini %filename% %%i note
            set p2=%%i               
            echo !p2:~0,15! !return!
        )
        goto :loop1
    )
    if  "%myname%"=="edit" (
        notepad %filename%
        goto :loop1
    )
    if  "!myname:~0,2!"=="g " (
        rem echo call !myname:~0,2! %filename% !myname:~2!
        call gotopath %filename% !myname:~2!
        if !return! EQU 0 (
            goto loop1
        ) else (
            exit
            rem echo =================exit===================
        )
        echo 程序不可能到運行這裏的
        goto :loop1
    )
    call readini %filename% %myname% command
    set mycmd=!return!
    call readini commandlist.ini %myname% param
    set myparam=!return!
    call readini commandlist.ini %myname% path
    set mypath=!return!
    call readini commandlist.ini %myname% note
    set mynote=!return!
    if "!mycmd!"=="" (
        echo 沒有找到%myname%對應的命令
        set myname=
        goto :loop1
    ) else (
        echo 程序說明:!mynote!
        set errorlevel=
        rem echo 輸出%errorlevel%
        if "!mypath!" NEQ "" (
            rem echo start "!mycmd!" /D!mypath! !mycmd! !myparam!
            start "!mycmd!" /D!mypath! !mycmd! !myparam!
        ) else (
            start "!mycmd!" !mycmd! !myparam!
        )
        if %errorlevel% NEQ 0 (
            @echo 錯誤代碼:%errorlevel% 
            goto :loop1
            set myname=
            set errorlevel=0
        )
        rem @echo 運行成功
        exit
    )
)
@echo on
pause

 

gotopath.bat 內容如下:

rem @echo off & setlocal enabledelayedexpansion
rem setlocal ENABLEDELAYEDEXPANSION
rem gp: goto path 去簡稱程序的目錄下
rem echo call readini %1 %2 path
set return=
call readini %1 %2 path
if "!return!" NEQ "" (
    start "gotopath" explorer !return!
    set return=1
) else (
    echo 沒有找到%2.path屬性
    set return=0
)
rem echo 執eee行結果:!return!
rem @echo on

 

help.txt內容如下:

-----------------------------------------
    幫助文檔
edit      編輯配置文件
help      顯示幫助文檔
quit      退出系統
show      顯示簡寫命令列表
g         去簡稱命令的path下,例如:g ues去UE的path
其他      執行簡寫命令
-----------------------------------------

commandlist.ini內容如下:

;測試用ini文件
;注意 名稱中不能有等號和空格
;     屬性和等號之間不能有空格
[cmd]
command=cmd.exe
param=
path="E:\Users\changliang02\Documents"
note=命令窗口
[np]
command=notepad
param=
path=
note=記事本
[dl]
command=explorer.exe
param="E:\Users\changliang02\Downloads"
path=
note=下載目錄
[xls]
command=EXCEL.EXE
param=
path="C:\Program Files\Microsoft Office\Office15"
note=Excelb辦公軟件
[sr]
command=SecureCRT.exe
param=
path="D:\Tools\securecrt"
note=SecureCRT遠程Telnet工具
[et]
command=Everything.exe
param=
path="D:\Tools\Everything"
note=查找本地文件
[ues]
command=UEStudio.exe
param=
path="D:\Program Files\IDM Computer Solutions\UEStudio"
note=UEStudio超級文本編輯器

希望對大家的學習和工作有幫助。

腳本編程,簡單,綠色,無毒,快樂。

 

 

發佈了37 篇原創文章 · 獲贊 32 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章