批處理的變數延時,批處理延遲變數

2022-12-29 12:45:47 字數 3025 閱讀 7916

1樓:

set /a sum=sum+1

這一句錯了,要寫成

set /a sum=!sum!+1

或set /a sum+=1

另外,你這裡可以不用延時環境變數的,**如下:

@echo off

:aset sum=0

set /a sum=%sum%+1

if %sum% equ 5 goto :b else goto :a

:becho %sum%

pause

2樓:匿名使用者

錯誤有兩個:

1、sum的初始化語句應該在迴圈體的外面否則會無限迴圈。

2、if語句中如果加了esle,那麼else前的語句要加括號。

正確**如下:

::══代══碼══開══始═══

@echo off & setlocal enabledelayedexpansion

set /a sum=0

:aset /a sum=sum+1

if !sum! equ 5 (goto :b) else goto :a

:becho !sum!

pause

::══代══碼══結══束═══

批處理延遲變數

3樓:依夢琴瑤

set "var=!var:%strma%=%ta%!"

改成call set "var=%%var:!strma!=!ta!%%"

set "var1=!var1:%ma%=%da%!"

改成call set "var1=%%var1:!ma!=!da!%%"

因為你的strma,ma,da這三個變數都在for中迴圈,開啟環境變數延遲後,因此它們也需要用雙感嘆號,但var和var1兩個變數也在for中迴圈,它們肯定也需要雙感嘆號,但那種替換的**不可以雙感嘆號的變數裡面再出現雙感嘆號的變數,因此只能通過call的方式轉換一下。

由於我沒有你的那些實際檔案內容,所以沒法測試,你自己嘗試一下看看準不準確?

在批處理命令裡如何在兩個命令之間延遲一段時間?

4樓:匿名使用者

timeout 5

這個就是等待5秒

timeout 5 /nobreak

就是等待5秒,除非按ctrl+c,否則強制等待5秒

5樓:匿名使用者

ping 127.1 -n 5 >nul

代表延遲5秒`不準確,就像你說的因為ms ping本機都是<1ms,所以這裡也只是5秒左右

你還可以呼叫vbs指令碼進行延遲,如下

echo program demo

echo set os = createobject("wscript.shell")>>x.vbs

echo wscript.sleep 1000>>

echo step 1

在vbs指令碼中1000=1秒,根據你實際情況修改下就好了

6樓:

ping 127.1 -n 5 >nul

bat批處理for if 多層巢狀 延遲變數問題

7樓:匿名使用者

迴圈變數與延遲變數無關。在迴圈中set 的變數才與延遲有關沒看到deldate在迴圈中設定,可以用%deldate%,如果略去的部分還有外層的for則用!deldate!

估計是 if判斷的問題。改成下面的判斷試試。

if 「%%i」 lss 「%deldate%」

還不行就在判斷前面加一句,便於除錯。

echo %%i %deldate%

8樓:匿名使用者

這個和變數延遲是沒有一關係的,可能是你的變數沒有得到定義,你在引用變數先把它echo $%%a$看看,有沒有被定義到

9樓:匿名使用者

看樣子是個刪幾天前檔案的,網上應該搜到到。你省去了一些就沒法幫你檢查了,只能告訴你不存在什麼延遲問題,主要是**複雜後弄錯了,想辦法一步步設定臨時echo和pause 細細檢查就是了,另外如果你不能保證所有路徑和檔名裡是沒有空格的則很多地方差引號

批處理 關於for if 延時變數相關**的修改

10樓:依夢琴瑤

又是這個問題,上次都提醒過你,你的計算命令不對,這次怎麼又這樣寫?

批處理中關於call變數延遲 20

11樓:匿名使用者

「星期%%str:~%num%,1%%」這一句是乙個字串,表示的含義是取str這個字串中,從num這個數字序號位置開始,取乙個字元。

這和 call 沒有關係。

但使用call,是呼叫外部命令,因此,只是傳參方式不同而已。

批處理 例子中變數延遲什麼時候用,為什麼遞增迴圈中要用,遞減就不用

12樓:匿名使用者

標識行不應處於某括號內,不然造成解釋混亂----本來在復合句內需要「變數延遲」的,一goto認為跳轉到新的單獨行,就不是復合句了,最後還會多了右括號

其實此例的括號都是多餘的,而且造成錯誤

if errorlevel 1 (

可改成 if errorlevel 1 goto :loop1

其實批處理是順序執行,除去滿足前一句判斷條件已跳轉外,所有情況都要執行 :loop1所以這一行都是多餘的整行刪去,後面配套右括號同時去掉

對於:loop2段,批處理除了執行goto和call命令外總是按順序執行,和別的程式語言不一樣沒有某段開始和結束的概念,本就不需要把此段加括號,相反由於有標識行在括號內而造成錯誤

這麼解釋應該明白了吧,如還有疑惑再追問。順便說一下此段if ....goto迴圈完全可以用 for /l %%i in (1,1,%b%) do 代替,括號內是(起值,增量,終值) 詳見for/?

批處理按條件批量移動檔案,bat批處理,根據清單中的檔名將多個檔案移動到另外乙個路徑下,如何批量處理?非常感謝!

echo off setlocal enabledelayedexpansionfor i in txt do set str ni copy i b str 1 以上為 放在資料夾a裡執行,如果不不行的話,吧.b 改成b資料夾的相對路徑 好辦,稍等,大概要10分鐘內,如果你還有要補充的,繼續追問你...

批處理替換指定檔案中的內容,批處理替換指定檔案中的內容

如果有特殊字元!會出錯啊。說明 setd d 是吧替換成了兩個空格,你可以改成沒有空格。儲存為bat檔案。在txt檔案所在目錄裡執行。echooffecho0 tem nulsetlocalenabledelayedexpansionfor f delims ain dir a d b b do s...

批處理顯示文字中重複出現的內容,批處理比對多文字檔案的 找出相同內容另存為乙個文字

你太想當然了。批處理最不擅長的就是進行字串處理。建議你還是學乙個sed或者gawk之類的專門用來處理字串的工具的用法。需要學正規表示式,太麻煩,平常用不到,好不容易學會了,幾天就忘了。echo off setlocal enabledelayedexpansion for f tokens i in...