用bat指令碼實現set命令替換以變數形式的字元

2022-03-15 00:49:51 字數 5751 閱讀 1478

1樓:匿名使用者

我感覺用字元替換實現比較難,還容易出錯,還是迴圈容易些。

你看這樣符合你的要求嗎?

@echo off

setlocal enabledelayedexpansion

set startport=3306

set endport=3315

for /l %%i in (%startport%,1,%endport%) do (

set basedir=e:\mysql\mysql server 5.1-%%i\bin

echo !basedir!

rem call domysql

)另外你用迴圈傳變數替換不成功也可能與變數延遲有關,你還可以按你的方法再試試。

開啟變數延遲 setlocal enabledelayedexpansion 迴圈內變數用!代替 %

2樓:匿名使用者

在這裡說吧,把你給的這句寫成這樣:

bat set中替換字串(用變數代表需替換的字串)

3樓:匿名使用者

@echo off

set "var=ab,dc,cc,ef,gg,aq,gg"

set "var=%var:,= %"

echo %var%

set "mat=gg"

echo %mat%

call set "var=%%var:%mat%= %%"

echo %var%

call命令會對其引數進行擴充套件,然後再執行,gg會替換成一個空格也可以啟用變數延遲來實現

%mat%=!

4樓:匿名使用者

@echo off

echo %var%

set mat=gg

echo %mat%

set var=!var:%mat%= !

echo %var%

pause

啟用批處理中的延遲變數擴充套件就可以輕鬆處理了.

bat set中替換字串(用變數代表源字串、需替換的子字串、目標字串)

5樓:匿名使用者

要先開啟變數延遲,就是setlocal enabledelayedexpansion

@echo off

setlocal enabledelayedexpansionset str0=d:\test\a\test.txtset str1=d:\test\a

set str2=d:\test\b

echo !result!

pause

開啟了變數延遲後,百分號要變成感嘆號,但是當變數名中有變數時,表示變數名的變數還是要用百分號。

6樓:

剛好遇到這個問題,順道幫你解決一下。

@echo  off

setlocal enabledelayedexpansionset str0=d:\test\a\test.txtset str1=d:\test\a

set str2=d:\test\b

echo !result!

pause

bat指令碼如何讀取多個以空格隔開的字串給多個變數呢,我知道讀一個字串可以用set /p

7樓:

@echo off

echo;%d%

echo;%t%

echo;any question +%@%%@% %n%pause

bat命令、全一點的、給加分

在.bat指令碼中如何將一個命令的返回結果傳給一個變數?

8樓:刺友互

1、首先用記事本新建一個資料夾。

2、然後在記事本里輸入ipconfig /release和ipconfig /renew命令。

3、將文字另存為.bat為字尾的檔案。

5、這時我們電腦就會將一個命令的返回結果傳給一個變數。

注意事項:批處理檔案的副檔名為bat 或cmd。目前比較常見的批處理包含兩類:

dos批處理和ps批處理。應用於dos和windows系統中。

9樓:海天盛

1.首先用記事本建立一個新資料夾。

2.然後在記事本中輸入ipconfig/release和ipconfig/renew命令。

3.將文字儲存為帶有bat字尾的檔案。

5.此時,我們的計算機將把一個命令的結果返回給一個變數。

10樓:匿名使用者

延遲變數全稱"延遲環境變數擴充套件",要理解這個東西,我們還得先理解一下什麼叫擴充套件!

cmd在解釋我們的命令的時候,首先會讀取命令列一條完整的命令,然後對其進行一些命令格式的匹配操作,看你所輸入的命令格式是不是符合他的要求.

如果我們要在我們的命令中引用一些變數,那麼我們如何讓cmd在解釋我們的命令時,能識別出這個變數呢?這時我們就可以在變數名字兩邊加一個%號,如%name%.當cmd在對讀取我們的整行

命令進行格式匹配的時候,就會發現name這個字元兩邊加了%號,就不會把他當作普通字元處理,

而是會把他當作一個變數處理,變數名叫name!然後cmd就會找到變數名對應的值,用變數名的值替換掉這個變數名字(name),(如果變數名不存在值,就返回空值).再將這個替換好並且匹配的命令執行!

這個替換值的過程,就叫做變數擴充套件,說白了就是把變數的名字,用他的值給替換掉後執行!也就是批處理如何識別一個變數的過程.

(注意:這裡只是變數的擴充套件的意思,不是延遲環境變數擴充套件,要理解延遲環境變數擴充套件,必須先理解什麼是變數的擴充套件) 也就是批處理如何識別一個變數的過程. ~_~

例如這個一個bat

set var=test

echo %var%

cmd在讀取到echo %var%這句命令後,就會進行匹配操作,它馬上就發現var字元兩邊有%號,這時他就會把他當作一個變數處理,檢視這個var變數名是不是有值,如果有就用他的值把變數名var給替換掉,這裡我們的var在上一條命令set var=test中,給var賦值為test,所以他會用test把%var%這個變數名替換掉,替換後的結果就為echo test了.這些步驟都是cmd進行匹配操作的步驟,匹配完後,他再執行echo test這條語句,這時我們的cmd中就會echo出一個test了.

什麼是環境變數擴充套件知道了,那什麼是延遲環境變數擴充套件呢?

在理解環境變數擴充套件時,我們知道cmd在解釋命令時,首先會把一條完整的命令進行讀取,然後進行匹配操作,匹配時他會把命令裡的變數用變數的值個替換掉,然後執行這個替換好的命令.

問題就出在"一條完整的命令",在bat中,if for這樣的命令都可以加括號,將一些命令巢狀在裡面執行.這樣的話對於一條可以加擴號嵌其他命令的命令,他的完整格式就是

for %%i in (....)這樣一個整體.此時,如果我們如果在括號裡面嵌入一些設定變數值的命令,就會出現問題了!

看例子@echo off

for /l %%i in (1,1,5) do (

set var=%%i

echo %var%

)執行後會顯示5個空行的錯誤提示!為什麼?根據我們上面說的知識來理解

@echo off

set var=test

for /l %%i in (1,1,5) do (

set var=%%i

echo %var%

)這個就會列印5個test了.

通過這兩個例子,大家因該已經理解,如果只有環境變數擴充套件這個過程的話,如果我們在可以巢狀命令的命令中執行賦值操作時,會讓我們的bat出現給變數賦值的問題.

那麼這個時候"延遲環境變數擴充套件",這個概念就被提出來了

在批處理中,我們可以用setloacl enabledelayedexpansion這個命令來啟用"延遲環境變數擴充套件"

在我們啟用了"延遲環境變數擴充套件"後,當cmd在解釋涵有巢狀格式的命令時,他會把巢狀的命令一條一條的先執行一次,然後再進行匹配操作,這樣我們的賦值操作就會完成.並且再"延遲環境變數擴充套件"啟用後,cmd會用!號來判斷這是不是一個變數,如沒啟用來變數用%name%這樣的格式判斷,啟用後就用!

name!這樣的格式判斷了,這個符號我們需要注意!

例子:@echo off

setlocal enabledelayedexpansion

set var=test

for /l %%i in (1,1,5) do (

set var=%%i

echo !var!

)這樣大家因該明白什麼是延遲環境變數擴充套件了吧.

再來一個例子

@echo off

set var=test & echo %test%

pause

這條命令放在一行,表示他是一條完整的命令,不啟用"延遲環境變數擴充套件",就會出現上面的賦值錯誤!

改成這樣

@echo off

setlocal enabledelayedexpansion

set var=test & echo !var!

pause

很容易理解了吧!

11樓:腦動力tv頻道

模板:cmd1 > tmp.dat

set /p var=結合問題後:

netstat -a|findstr 50000 > tmp.dat

set /p a=最後不需要tmp.dat加上:del tmp.dat

12樓:匿名使用者

有個問題是,你需要確定,只返回一行數值,否則,它會只取最後一個。

for /f "delims=" %%i in ('netstat -a^|findstr 50000') do (set a=%%i)

echo %a%

pause

bat檔案 ren命令中使用帶空格的字串變數作為引數報錯,如何解決?

13樓:匿名使用者

pause

for /d %%i in (*"(1)") do ( echo %%i

set m=%%i

set m=!m:~0,-4!

echo !m!

ren "%%i" "!m!"

)加上""就可以了

14樓:陽光上的橋

新增引號就可以了,例如:

ren "%%i" "!m!"

求解此bat指令碼意思,求解此bat指令碼意思

冒號加一串有效的字元可作為批處理的指令碼中的標籤,用於goto時定址 c 就是設定一個標籤c 如果i 10 則i i 1,然後轉到c標籤位置,再次執行,形成迴圈。注意,這裡的c不應該有冒號了 c是 goto c 就是goto語句跳轉的 c 就是變數i小於10,那麼i加一,並跳轉到 c處 請解釋一下這...

如何用bat指令碼改檔名字?

1 新建一個文字文件。注意 要跟你的那些檔案放一起。注意 要儲存為ansi檔案。3 右鍵重新命名字尾名為bat,然後執行。改完之後出現的彈窗直接點確定。4 這時候,檔名就成功修改了。完畢!用bat命令如何修改檔名?1 找到需要批量修改的檔案,把它們放在一個同資料夾裡 2 在空白處右擊滑鼠,在介面中...

用shell指令碼實現兩個檔案比較

root localhost xly ll a.txt b.txt rw r r 1 root root 28 jul 13 15 00 a.txt rw r r 1 root root 30 jul 13 15 00 b.txt root localhost xly cat a.txt hello...