cmd的變數總結

来源:https://www.cnblogs.com/feiquan/archive/2018/12/24/10170203.html
-Advertisement-
Play Games

轉自:https://blog.csdn.net/flyoutsan/article/details/52811095 cmd變數通過set設置變數,通過可以使用set /?查看有關變數的幫助文檔。 接下來談set的用法: 1.set 變數名=值 值可以包含空格、一直到命令結束,也可以是Ctrl+G ...


轉自:https://blog.csdn.net/flyoutsan/article/details/52811095 

cmd變數通過set設置變數,通過可以使用set /?查看有關變數的幫助文檔。

接下來談set的用法:

1.set 變數名=值

值可以包含空格、一直到命令結束,也可以是Ctrl+G這種代表警報聲的字元(echo輸出會發出警報聲“滴~”),與echo類似

 

2.set 變數名

在系統中預定義了一批環境變數(所有的環境變數將附加在博客尾),如最常見的path變數,記錄了系統應用程式的預設路徑,如果僅僅使用set 變數名,那麼將會列印所有以這個變數名開頭的變數為的值。例如如果set p,將會列印ProgramFiles, ProgramFIles(X86), path等以p開頭的變數的值。如果用戶通過set設置了新的變數,如set pt=point那麼新變數在這個cmd中將加入環境變數,因此set p也將會列印出pt的值,與環境變數不同的是,該變數只在當前cmd有效,同時對環境變數的更改也只是在當前cmd有效。

 

3.set /P 變數=提示

變數將通過用戶輸入接收值,提示作為提示信息輸出,例如set /p v=輸入v的值:,那麼將會出現

輸入v的值

(等待輸入)

 

4.set /A 變數=表達式

表達式將被視為算術表達式,變數賦值為算術表達式的值,算術運算符參照幫助文檔或者官方網站文檔(可以發現,與C語言運算符基本相同):

如果要使用其他變數的值,需要使用%變數名%(或者 !變數名!)來表示該變數。同時0X與0分別表示十六進位與八進位數字。

 

   +   Add                set /a "_num=_num+5"
   +=  Add variable       set /a "_num+=5"
   -   Subtract (or unary)set /a "_num=_num-5"
   -=  Subtract variable  set /a "_num-=5"
   *   Multiply           set /a "_num=_num*5"
   *=  Multiply variable  set /a "_num*=5"
   /   Divide             set /a "_num=_num/5"
   /=  Divide variable    set /a "_num/=5"
   %   Modulus            set /a "_num=5%%2"
   %%= Modulus            set /a "_num%%=5" 
   !   Logical negation  0 (FALSE) ⇨ 1 (TRUE) and any non-zero value (TRUE) ⇨ 0 (FALSE)
   ~   One's complement (bitwise negation) 
   &   AND                set /a "_num=5&3"    0101 AND 0011 = 0001 (decimal 1)
   &=  AND variable       set /a "_num&=3"
   |   OR                 set /a "_num=5|3"    0101 OR 0011 = 0111 (decimal 7)
   |=  OR variable        set /a "_num|=3"
   ^   XOR                set /a "_num=5^3"    0101 XOR 0011 = 0110 (decimal 6)
   ^=  XOR variable       set /a "_num=^3"
   <<  Left Shift.    (sign bit ⇨ 0)
   >>  Right Shift.   (Fills in the sign bit such that a negative number always remains negative.)
                       Neither ShiftRight nor ShiftLeft will detect overflow.
   <<= Left Shift variable     set /a "_num<<=2"
   >>= Right Shift variable    set /a "_num>>=2"

  ( )  Parenthesis group expressions  set /a "_num=(2+3)*5"
   ,   Commas separate expressions    set /a "_num=2,_result=_num*5"

 

5.%變數名:str1=str2%

表示將變數的值中包含的str1使用str2替換後獲得的變數,例如

set a="minecraft great!"

echo %a: = is so %

echo %a 

此時將會輸出:

minecraft is so great!

minecraft great!

這裡將空格替換為( is so ),因此輸出minecraft is so great!,而%a%依然如故,說明原變數並沒有發生變化

 

6.%變數名(已定義):~start[, length]%

表示從start出開始(包括start,第一個計數為0),取length長的子串,如果length省略,則表示取到串尾,start可以為負數,最後一個字元為-1,從後往前依次為-2、-3、-4……

 

7.setlocal [Enable|Disable]DelayedExpansion

執行cmd或者bat文件是從頭向後執行,變數有一個擴展規則,即在執行一個語句塊時變數將會被變數的值代替,例如

set a=hello& echo a

這個語句通過&連接成為一個語句塊,又如

(set a=steve

if defined a echo hello %a%)

是通過()組合的一個語句塊

在執行語句塊時,a將會被a的值所代替,而語句塊中的set語句將會在該語句塊執行完後才有效,例如

set a=hello

(set a=steve

if defined a echo hello %a%)

將會輸出hello而不是steve,可以理解為當前語句塊中所有的set都在下一句語句塊執行時才有效,在當前語句塊不做任何事情

這樣將會對程式的邏輯性產生很大的影響,為瞭解決這個問題,我們可以使用setlocal EnableDelayExpansion。

EnableDelayedExpansion,直接翻譯為“啟用擴展延遲”,這個我們可以理解為原來的情況是在執行語句塊時所有的變數都被擴展為值了,此時還未執行set命令,而啟用後,擴展被延遲到語句塊執行結束時,此時set命令已經執行,原來變數的值已經被set為了新的值,因此set已經生效。註意,啟用後變數的調用將會變為!變數名!,如果使用%變數名%,調用的將會是未使用擴展延遲的狀態的變數(即與原來沒什麼區別),與之相對的還有setlocal DisableDelayedExpansion,為相反的效果。

當執行這個命令後,在執行endlocal之前,setlocal將會一直生效,因此EndLocal就是將setlocal的效果“終結”的命令,使用後,setlocal(無論enable還是disable),效果都將end,一個setlocal對應一個endlocal。

 

預處理機制:批處理讀取命令時是按行讀取的(另外例如 for 命令等,其後用一對圓括弧閉合的所有語句也當作一行),在處理之前要完成必要的預處理工作,這其中就包括對該行命令中的變數賦值。在不啟用變數延遲,也不對變數動態捕獲其擴展變化時,變數在預處理階段不作改變

setlocal enabledelayedexpansion ,就是啟用變數延遲,我們可以形象的認為是啟用了“對變數動態捕獲擴展變化”。而 ! 括起來的變數,就是要動態捕獲擴展的目標變數,如果不需要,可以繼續使用 % 括變數。

示例:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set var=0
for /l %%i in (1 1 10) do (
set var=%%i

rem 啟用延緩環境變數 echo
!var! ....

rem 未啟用延緩環境變數 echo
%var% )

 

 

 

8.setlocal [Enable|Disable]Extensions

啟用或者禁用Extension,部分cmd命令擁有啟用Extension後的“額外”功能,如果沒有啟用,那麼功能不可用,如if。

 

9.setlocal

setlocal將表示setlocal後直到endlocal,所有的變數都是局部變數,例如

@echo off
set b=1
setlocal
set b=2
setlocal 
set b=3
set c=hi
echo %b% %c%
endlocal
echo %b% 
if defined c echo %c%
endlocal
if defined c echo %b% %c%

輸出為

3 hi

2

 

又如:

@echo off 
set a=1
setlocal
set a=2
setlocal
set a=3
set c=4
echo %a% %c%
endlocal
echo %a%
endlocal
echo %a%
pause

輸出:

 

 

10.for %i in (set) do

在文件(bat或者cmd)中需要將%i使用%%i來代替,%%i不會出現變數擴展的問題,在迴圈中同步更新%%i的值(謝天謝地,一切正常)

 

11.bat/cmd文件 + 參數1 + 參數2 + 參數3 + ……

通過%1,%2,%3表示對參數1、2、3……的引用,%0表示bat文件的絕對路徑+文件名,如C:\Users\Administrator\Desktop\test.bat

 

12.系統預定義環境變數表直接輸入 set 後可以獲得

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Scrapy Scrapy 是一個位了爬取網站數據,提取數據結構性數據而編寫的應用框架,少量代碼,就能快速爬取,使用了Twisted 非同步網路框架,加快我們下載速度! 工作流程 製作 Scrapy 爬蟲 一共需要4步: 新建項目 (scrapy startproject xxx):新建一個新的爬蟲項 ...
  • Guava官方文檔 https://github.com/google/guava/wiki/CollectionUtilitiesExplained 官方文檔這樣描述: " " addresses the common case of having a bunch of objects that ...
  • 1.什麼是AOP? AOP(Aspect-Oriented Programming, 面向切麵編程): 是一種新的方法論, 是對傳統 OOP(Object-Oriented Programming, 面向對象編程) 的補充,它的主要編程對象是切麵(aspect), 而切麵模塊化橫切關註點.在應用 A ...
  • 快速讀入模版 ...
  • 1. 瞭解python2和python3類的區別 python2在2.3之前使用的是經典類, 2.3之後, 使用的是新式類 2. 經典類的MRO 樹形結構的深度優先遍歷 -> 樹形結構遍歷 從左到右,深度遞歸,一直到頭再返回 Foo -> H -> G -> D -> B -> A -> C -> ...
  • super(類名, self) 從某個類開始找下一個MRO 第一步: 先找一下整個程式的MRO 用c3演算法查找: 查找順序如上,知道了執行順序就可以按流程執行了 ...
  • 1、在使用query和update在什麼時候使用帶Connection參數的? 在已經獲取到了DataSource 對象之後,不必使用帶Connection參數的方法 DataSource dataSource = DBCPUtil.getDataSource(); QueryRunner quer ...
  • 【寫在前面】正直青春年少的你,遇到了你的她了嗎?還是你也和我們今天的主人公一樣,在最美好的年級,正在為你的初衷努力著,堅持著,奔波著..... 作者:李偉 我的黑客時代 01 大學專業是電子信息工程,不甚喜歡。我更喜歡在室友上課的時候,獨自一人待在宿舍抓肉雞,併為之廢寢忘食。每天拿著掃描器,導入成千 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...