㈠ 批處理執行循環命令
1、批處理的變數是兩個%,如%%a
2、do後面的命令行最好用英文的括弧括起來,如
for /f "tokens=1 delims=," %%a in (ou.txt) do ( dsadd ou ou=%%a,dc=guan,dc=com)
pause這運行下我這行命令,看有什麼錯誤提示沒?
㈡ 批處理BAT怎麼用循環輸出字元串
你好!
下面代碼可以實現你要的功能:
@echooff
for/l%%iin(100001,1,100099)do(
setx=%%i
echo!x:~-5!>>a.txt
)
pause
>a.txt是覆蓋內容
>>a.txt是追加內容
希望對你有幫助!
㈢ BAT批處理文件for循環的基本格式方法
你還在為不知道BAT批處理文件for循環的基本格式方法而煩惱么?接下來是我為大家收集的BAT批處理文件for循環的基本格式方法教程,希望能幫到大家。
BAT批處理文件for循環的基本格式方法
一,基本格式
對一組文件中的每一個文件執行某個特定命令。
FOR %variable IN (set) DO command [command-parameters]
%variable 指定一個單一字母可替換的參數。
(set) 指定一個或一組文件。可以使用通配符。
command 指定對每個文件執行的命令。
command-parameters
為特定命令指定參數或命令行開關。
在批處理程序中使用 FOR 命令時,指定變數請使用 %%variable
而不要用 %variable。變數名稱是區分大小寫的,所以 %i 不同於 %I.
參數:for有4個參數 /d /l /r /f 他們的作用在下面的例子中講解
二,參數/d
FOR /D %variable IN (set) DO command [command-parameters]
如果集中包含通配符,則指定與目錄名匹配,而不與文件名匹配。
例如:
@echo off
for /d %%i in (c:*) do echo %%i
pause
運行後, 會把c盤根目錄下的全部目錄列印出來, 不會列印文件
例子:
@echo off
for /d %%i in (???) do echo %%i
pause
會把當前目錄下有目錄名字只有1-3個字母的,就會顯示出來,沒有就不顯示了
* 號表示任意N個字元,而?只表示任意一個字元
三,參數/r
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
檢查以 [drive:]path 為根的目錄樹,指向每個目錄中的 FOR 語句。
如果在 /R 後沒有指定目錄規范,則使用當前目錄。如果集僅為一個單點(.)字元,
則枚舉該目錄樹。
/r 可以把當前或者你指定路徑下的文件名全部讀取,注意是文件名字,
注意2點:
1.set中的文件名如果含有通配符(?或*),則列舉/r參數指定的目錄及其下面的所有子目錄中和set相符合的所有文件,無相符文件的目錄則不列舉
2.相反,如果set中為具體文件名,不含通配符,則列舉該目錄樹,而不管set中的指定文件是否存在
例子:
@echo off
for /r d: %%i in (*.exe) do echo %%i
pause
將把d盤里以exe結尾的文件全部列出來
@echo off
for /r d: %%i in (boot.ini) do echo %%i
pause
列舉d盤中存在boot.ini文件的目錄
四。
FOR /L %variable IN (start,step,end) DO command [command-parameters]
該集表示以增量形式從開始到結束的一個數字序列。因此,(1,1,5)將產生序列
1 2 3 4 5,(5,-1,1)將產生序列(5 4 3 2 1)
start 為起始值,stup為增量,end結束值,
例子:
@echo off
for /l %%i in (1,1,5) do echo %%i
pause
將會列出12345 這幾個值
@echo off
for /l %%i in (1,1,5) do start cmd
pause
會打開5個cmd的窗口
五,參數/F
迭代及文件解析
使用文件解析來處理命令輸出,字元串及文件內容,使用迭代變數定義要檢查的內容或字元串,並使用各種option選項來進一步
修改解析方式,使用options令牌選項指定那些令牌應該作為迭代變數傳遞
注意:在沒有使用令牌選項時,/f將只檢查第一個令牌
文件解析過程包括讀取輸出,字元串或文件內容,將其分成獨立的文本行以及在將每行解析成零個或更多個令牌
讓後通過設置為令牌的迭代變數值,調用for循環,默認情況下,/f傳遞每個文件每一行的第一個空白分隔符,跳過空行
命令格式:
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
帶引號的字元串“options”包括一個或多個
指定不同解析選項的關鍵字,這些關鍵字為:
eol=c 指定一個注釋字元的結尾(就一個)
skip=n 指在文件開始時忽略的行數
delims=xxx 指定分隔符集,這個替換了空格和跳格鍵的默認分隔符集
tokens=x,y,m-n 指每行的哪一個符合被傳遞到每個迭代的for本身,這回倒是額外名稱的分配,m-n格式為一個范圍
通過nth符號指定mth,如果符號字元串中的最好一個字元星號,那麼額外的變數將在最好一個符號解析之後分配並接受行的保留文本,
經過測試,該參數最多隻能區分31個欄位
usebackq 指定新語法已在下類情況中使用:
在作為命令執行一個後引號的字元串並且一個單
引號字元為文字字元串命令並允許在 file-set
中使用雙引號擴起文件名稱。
例子:
@echo off
rem 首先建立臨時文件,用完刪除>test.txt
echo ;注釋行,這個是臨時文件,用完刪除>text.txt
echo 11 12 13 14 15 16 >> test.txt
echo 21,22,23,24,25,26 >> test.txt
echo 31-32-33-34-35-36 >> test.txt
for /F "eol=; tokens=1,3* delims=,- " %%i in (test.txt) do echo %%i %%j %%k
pause
del text.txt
運行......
解釋:
eol=; 分號開頭的行章節附註釋行
tokens=1,3- 將每行第1段,第3段和剩餘地段分別賦予變數%%i,%%j,%%k
delims=,- (減號後有一空格)以逗號減號和空格為分隔符,空格必須放在最後
例子:
@echo off
for /f "skip=4 delims=" %%i in ('net user') do echo %%i
pause
這樣你本機全部賬號名字就出來了把括弧內的內容用兩個單引號起來就表示那個當命令執行,for會返回命令的沒行結果,加那個"delims=" 是為了讓空格的行能正行顯示出來,不加就默認只顯示空格左邊一列,應為默認的分隔符為空格或叫跳格鍵。
看了“BAT批處理文件for循環的基本格式方法”還想看:
1. 批處理文件
2. bat命令怎麼批處理
3. bat批處理命令
4. 常用的文件格式集錦
5. bat批處理文件顯示亂碼怎麼辦
㈣ 如何讓bat腳本循環執行
讓bat腳本循環執行有以下兩種方法:
第一、可以直接加個%0,即執行本身,實現循環。
第二、用goto命令,去到你要重復的開頭,如果要限制次數,可以先set 一個值,循環一次減1,條件命令到0退出,實現循環。
㈤ 請教,cmd下如何用for不斷循環一條命令,而不是執行一遍,也不是在bat里
一、@echo off
:s
ping localhost -n 5 > nul
echo
goto s
pause
每隔5秒顯示一次
或用死循環
:start
@echo C:UsersadminDesktop
@goto start
二、@echo off
:Loop
for /l %%i in (1,1,221) do labelme_json_to_dataset %%i.json
goto Loop
(5)批處理循環命令擴展閱讀:
參數在批處理的表達是%0,%1,%2....%9 ,以及全部參數%*(不包括%0)
%0的初始量是批處理本身路徑,類似%~f0
一般你只能取前九個參數,除非你使用%*
shift命令允許你獲取後面的參數
格式:shift [/n]
n為1~8的數
shift 會使%0變成%1,%1變成%2……%9變成原來的第10個參數(不推薦)
一般使用shift /1,將會從%1開始替換,保留原%0
注意:call標簽時參數也是可用的,而且當返回時參數將變回原來的。
㈥ 批處理循環語句
for語句
例:
循環創建文件夾名為1~10000的文件夾
for /l %%a in (1,1,10000) do md %%a
㈦ 批處理循環執行某一程序1小時
@echooff
set@=q&set/an=0x53b7e0b4
titleAnyquestion+%@%%@%%n%
rem子程序完整路徑
set"subbat=D:xxx.bat"
rem監控時長,單位(秒)
settimer=3600
rem計時器,xp以上系統可以用timeout命令取代
(echo;Setfso=CreateObject^("Scripting.Filesystemobject"^)
echo;bs=String^(30,Chr^(8^)^)
echo;Fori=CLng^(WSH.Arguments^(0^)^)to1step-1
echo;fso.GetStandardStream^(1^).write"Waitingfor"^&i^&"seconds"
echo;WSH.Sleep1000
echo;fso.GetStandardStream^(1^).writebs
echo;Next
echo;WSH.echo""
echo;WSH.Quit)>"%tmp% .vbs"
(echo;while^(!WSH.StdIn.AtEndOfStream^){
echo;varline=WSH.StdIn.ReadLine^(^).replace^(/s*$/,''^);
echo;varm=line.match^(/^^^(.+^)s+^(d+^)$/^);
echo;WSH.echo^(m[2]+'^|'+m[1]^);}
echo;WSH.Quit^(^);)>"%tmp% .js"
>"%tmp% imer.bat"echo;@echooff^&titleAnyquestion+%@%%@%%n%
>>"%tmp% imer.bat"echo;modeconcols=50lines=8
>>"%tmp% imer.bat"echo;cscript-nologo-e:vbscript"%%tmp%% .vbs"%timer%
>>"%tmp% imer.bat"echo;wmicProcesswhere"Name='cmd.exe'"getCommandLine,ProcessId^|findstr"[0-9]"^|cscript-nologo-e:jscript"%%tmp%% .js"^>"%%tmp%% .log"
>>"%tmp% imer.bat"echo;for/f"delims=^|"%%%%ain('type"%%tmp%% .log"^^^|find/i"%subbat%"')dotaskkill/f/pid%%%%a/t
>>"%tmp% imer.bat"echo;for/f"delims=^|"%%%%ain('type"%%tmp%% .log"^^^|find/i"%~0"')dotaskkill/f/pid%%%%a
>>"%tmp% imer.bat"echo;pause^&exit
rem開始子程序
start"""%subbat%"-n-t
rem開始計時
start"""%tmp% imer.bat"
rem循環監控
:loop
wmicProcesswhere"Name='cmd.exe'"getCommandLine|find/i"%subbat%"||(
rem如果檢測到subbat沒有運行則重開
rem如果子程序運行完無法正常退出,在子程序代碼里加上exit命令
echo;restartat%date%%time%
start"""%subbat%"-n-t
)
>nulping/n20
goto:loop