windows 批處理

windows 基礎: 
    匹配文件時 * 匹配任意長度,? 匹配單個字符  
    系統變量 %變量名%
    . 當前目錄
    .. 上級目錄
    當目錄或文件有空格時用 "" 來界定
    批處理不區分大小寫,值可能區分
批處理:
    簡單命令:echo,pause,cls,find,date,time,shutdown,systeminfo,tree,ping,tasklist,calc,mstsc,mspaint
    常用操作: 
        >nul 正常信息輸出到空設備
        2>nul 錯誤信息輸出到空設備
        echo. 輸出一個空行
        關閉命令回顯 echo off ,這樣就不需要每個命令前都加入 @ 
        查看幫助 command /?
        %0 重複執行
    常用符號解釋:
        | 管道操作符,前面的輸出做爲後面的輸入
        & 執行完上一條命令後,接着執行下一條命令用同一命令 如 dir c:\ & d:\
        @ 關閉當前命令的回顯,只顯示處理結果,而不顯示執行的命令
        > 命令的輸出結果重定向到後面的設備
        >> 輸出結果追加到後面的設備
        < 將後面指定設備的內容,作爲前面命令的輸入內容
        ^ 轉義符號
        : 標籤 使用 goto 跳轉到這個標籤 :標籤 goto 標籤名
        , 可以當成命令與參數之間的空格
        ; 兩個相同的命令時可省略命令名如 dir c:\;d:\
        邏輯符號
            && 上一命令執行成功才執行下一命令,是兩個命令
            || 上一命令執行成功就不執行下一命令
文本處理
    type 顯示文本文件中的內容
    more 分頁處理
    for /f
目錄操作
    cd,dir
文檔管理 
    del 
        /s 從所有子目錄中刪除指定文件 
        /f 強制刪除只讀文件
        /q 安靜模式,不要求確認

set 不加參數爲查看所有變量

變量:
    系統變量,自定義變量
    %CD%            : 當前目錄
    %errorlevel%    : 返回上一條命令的錯誤代碼
    %HOMEDRIVE%     : 連接到用戶主目錄的本地工作站的驅動器號,在本地用戶和組中指定
    %PATH%
    %WINDIR%        : 操作系統目錄位置 C:\WINDOWS
    %RANDOM%        : 返回 032767 之間的任意十進制數字
    %SYSTEMROOT%    : 返回操作系統 根目錄位置 C:\WINDOWS
    %USERNAME%      : 當前登錄用戶名
    %USERDOMAIN%    : 用戶帳戶域名稱
    %USERPROFILE%   : 用戶配置文件位置

    %1~%9 接收的參數 %* 全部參數
    %0 
        返回批處理所在的絕對路徑
        無限循環,相當於把當前批處理再次執行
    自定義變量 
        set name=值
            /p name=提示語句 由用戶輸入變量值 
            /a name=運算後的值
                例 : set /a name=1+1,name=1 "&" 1
            替換變量值 
                set var=%name: =% 把 name 變量中空格替換爲沒有
            字符串截取
                set var=%name:~1,2% 把 name 變量中 從第1個,截取 2set var=%name:~3% 從第 3 個開始,後面的全部截取
                set var=%name:~-3% 從後面截取 3 個字符
    延遲變量(延遲環境變量擴展(解釋執行的時候替換變量成值))
        bat 是整條命令讀取執行的(重要),提前會把變量替換成值 
        例1:
            set var=test
            for /l %%i in (1,1,5) do (
                set var=%%i
                echo !var!
            )
            pause
            這個將會打出 5 個 test ,而不是預期的 123452:
            set var=text & echo %test% 
        解決問題:
            setlocal enabledelayedexpansion
            使用 !name! 來使用變量

分支語句
    if 
        /i 字符串時區分大小寫
        if defined 變量名(注:這個變量名可以是變量) () else () 
        if %var% equ,neq,lss,leq,gtr,geqif %errorlevel% == 0 (
            command
        ) else (
            command
        )
        if [not] exist filename command

循環語句 注: %%i 在 cmd 中只需要一個 %
    for %%i in (set) do command  ::set 支持通配符
        /d 僅對目錄有效果
        /r 路徑 遞歸,不指定路徑時爲當前路徑根目錄
        /l 迭代枚舉
        /f 文本解析
            for /f "擴展參數" %%i in (filenameset) do command 
                eol : 排除以什麼開頭的行 
                tokens : 找出哪些列 (注:從 1 開始 )
                delims : 以什麼做爲分隔符

    for /f 參數示例:
        默認 for /f "eol=; tokens=1 delims= " 
        for /f "eol=; tokens=1 delims= " %%i in (test.txt) do echo %%i
        for /f "delims=" %%i in ('net user') do echo %%i
        for /f "tokens=1,2 delims= " %%i in ('net user') do echo %%a %%b
        for /f "tokens=* delims= " %%i in ('net user') do echo %%i
        for /f "tokens=1-3 delims= " %%i in ('net user') do echo %%a %%b %%c

    for 變量 
        1.注:text.txt 中文本有引號  %~i 消除引號
            消除規則:
                "2322" -> 2322
                "2322  -> 2322
                23"22  -> 23"22
                2322"  -> 2322"
            for /f "delims=" %%i in (test.txt) do echo %%~i
        2.  for /f "delims=" %%i in ('dir /b') do echo %%~fi 使 %%i 成爲完整路徑
        ...
        3. for /f "delims=" %%i in ("net.exe") do echo %%~$PATH:i 在 path 下搜索  net.exe
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章