❶ bat批處理中怎樣用while循環
bat
常用命令
echo、@、call、pause、rem(小技巧:用::代替rem)是批處理文件最常用的幾個命令,我們就從他們開始學起。
==== 注 ===========
首先, @ 不是一個命令, 而是DOS 批處理的一個特殊標記符, 僅用於屏蔽命令行回顯. 下面是DOS命令行或批處理中可能會見到的一些特殊標記符:
CR(0D) 命令行結束符
Escape(1B) ANSI轉義字元引導符
Space(20) 常用的參數界定符
Tab(09) ; = 不常用的參數界定符
+ COPY命令文件連接符
* ? 文件通配符
「「 字元串界定符
| 命令管道符
< > >> 文件重定向符
@ 命令行回顯屏蔽符
/ 參數開關引導符
: 批處理標簽引導符
% 批處理變數引導符
其次, :: 確實可以起到rem 的注釋作用, 而且更簡潔有效; 但有兩點需要注意:
第一, 除了 :: 之外, 任何以 :開頭的字元行, 在批處理中都被視作標號, 而直接忽略其後的所有內容, 只是為了與正常的標號相區別, 建議使用 goto 所無法識別的標號, 即在 :後緊跟一個非字母數字的一個特殊符號.
第二, 與rem 不同的是, ::後的字元行在執行時不會回顯, 無論是否用echo on打開命令行回顯狀態, 因為命令解釋器不認為他是一個有效的命令行, 就此點來看, rem 在某些場合下將比 :: 更為適用; 另外, rem 可以用於 config.sys 文件中.
=====================
echo 表示顯示此命令後的字元
echo off 表示在此語句後所有運行的命令都不顯示命令行本身
@與echo off相象,但它是加在每個命令行的最前面,表示運行時不顯示這一行的命令行(只能影響當前行)。
call 調用另一個批處理文件(如果不用call而直接調用別的批處理文件,那麼執行完那個批處理文件後將無法返回當前文件並執行當前文件的後續命令)。
pause 運行此句會暫停批處理的執行並在屏幕上
❷ bat循環文件如何寫
編程bat文件的for循環寫法:
@echo off
for /l %%a in (1,1,9) do (
for /l %%b in (1,1,9) do (
for /l %%c in (1,1,9) do (
echo %%a%%b%%c>>1.txt
)
)
)
pause
%%1是變數名,變數名只能是一個字.可為任意數字或字母;
/l是for里的一個遞增參數(初始值,遞增值,最終值)。
❸ .BAT文件循環運行問題!
@echooff&title創建定時計劃任務By依夢琴瑤
color0a&cd/d"%~dp0"
%1echo正在請求管理員許可權。。。&&mshtavbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c%~s0::","","runas",1)(window.close)&&exit
::設置「358_170401」目錄路徑
setDirPath_1=E:APR358_170401
::設置「358_170402」目錄路徑
setDirPath_2=E:APR358_170402
::設置「01數據音頻」目錄路徑
setSavePath=%USERPROFILE%Desktop識別 1數據音頻
::設置「Bat播放腳本」路徑
setBatPlayer=%USERPROFILE%DesktopBatPlayer.bat
::設置「Bat播放腳本」的標題
setBatPlayerTitle=Bat腳本播放音頻
::設置「Bat播放腳本」中調用的播放程序進程名(如有的話)
setPlayerName=
if/inot"%~dp0"=="%AppData%YiMengQinYao"(
ifnotexist"%AppData%YiMengQinYao"md"%AppData%YiMengQinYao"
/y"%~0""%AppData%YiMengQinYaoScheleTaskCreate.bat">nul2>nul
)
ifnotexist"%AppData%YiMengQinYaoRunFile.vbs"(
ifnotexist"%AppData%YiMengQinYao"md"%AppData%YiMengQinYao"
(echo'運行文件By依夢琴瑤
echo'用法RunFile.vbs"程序""隱藏"
echo'隱藏參數0=是1=否
echo,
echoCreateObject^("WScript.Shell"^).RunWScript.Arguments^(0^),WScript.Arguments^(1^),FALSE)>"%AppData%YiMengQinYaoRunFile.vbs"
)
::創建12:00開始的計劃任務
setTaskName=1200_執行拷貝文件
setDesc=每天從12:00開始至21:00結束,每隔20分鍾,拷貝358_170401目錄文件。
setPTMin=20
setSBMin=00
setETL=PT10H
setCommand=%AppData%YiMengQinYaoCopyFile_1.bat
(echo@echooff^&title拷貝以及刪除文件By依夢琴瑤
echord/s/q"%SavePath%"
echomd"%SavePath%"
echox/s/e/y"%DirPath_1%""%SavePath%"
echoexit)>"%Command%"
call:CreateScheleTask
::創建12:01開始的計劃任務
setTaskName=1201_執行播放程序
setDesc=每天從12:01開始至21:00結束,每隔10分鍾,執行播放程序。
setPTMin=10
setSBMin=01
setETL=PT8M
setCommand=%BatPlayer%
call:CreateScheleTask
::創建12:08開始的計劃任務
setTaskName=1208_執行結束播放
setDesc=每天從12:08開始至21:00結束,每隔10分鍾,結束播放程序。
setPTMin=10
setSBMin=08
setETL=PT10H
setCommand=%AppData%YiMengQinYaoKillPlayer.bat
(echo@echooff^&title結束播放程序By依夢琴瑤
ifdefinedBatPlayerTitle(
echotaskkill.exe/f/fi"WINDOWTITLEeq%BatPlayerTitle%"
)
ifdefinedPlayerName(
echotaskkill.exe/f/im%PlayerName%
)
echoexit)>"%Command%"
call:CreateScheleTask::創建12:10開始的計劃任務
setTaskName=1210_執行拷貝文件
setDesc=每天從12:10開始至21:00結束,每隔20分鍾,拷貝358_170401目錄文件。
setPTMin=20
setSBMin=10
setETL=PT10H
setCommand=%AppData%YiMengQinYaoCopyFile_2.bat
(echo@echooff^&title拷貝以及刪除文件By依夢琴瑤
echord/s/q"%SavePath%"
echomd"%SavePath%"
echox/s/e/y"%DirPath_2%""%SavePath%"
echoexit)>"%Command%"
call:CreateScheleTask
::創建計劃任務創建任務
setTaskName=創建每天計劃任務
setDesc=每天定時創建用於當天12:00開始的計劃任務。
setCommand=%AppData%YiMengQinYaoScheleTaskCreate.batremrem
%2call:CreateScheleTaskToTask
del/f/qScheleTask.xml>nul2>nul
%2echo請按任意鍵退出。&pause>nul
exit
:CreateScheleTask
echo正在創建計劃任務:"%TaskName%"(會強制覆蓋同名任務)...&echo,
setNowDate=%date:~,10%
setNowDate=%NowDate:/=-%
setNowTime=%time:~,8%
setNowTime=%NowTime:=0%
(echo^<?xmlversion="1.0"encoding="UTF-16"?^>
echo^<Taskversion="1.2"xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"^>
echo^<RegistrationInfo^>
echo^<Date^>%NowDate%T%NowTime%^</Date^>
echo^<Author^>%USERNAME%^</Author^>
echo^<Description^>%Desc%^</Description^>
echo^</RegistrationInfo^>
echo^<Triggers^>
echo^<CalendarTrigger^>
echo^<Repetition^>
echo^<Interval^>PT%PTMin%M^</Interval^>
echo^<StopAtDurationEnd^>false^</StopAtDurationEnd^>
echo^</Repetition^>
echo^<StartBoundary^>%NowDate%T12:%SBMin%:00^</StartBoundary^>
echo^<EndBoundary^>%NowDate%T21:00:00^</EndBoundary^>
echo^<Enabled^>true^</Enabled^>
echo^<ScheleByDay^>
echo^<DaysInterval^>1^</DaysInterval^>
echo^</ScheleByDay^>
echo^</CalendarTrigger^>
echo^</Triggers^>
echo^<Principals^>
echo^<Principalid="Author"^>
echo^<UserId^>%COMPUTERNAME%\%USERNAME%^</UserId^>
echo^<LogonType^>InteractiveToken^</LogonType^>
echo^<RunLevel^>HighestAvailable^</RunLevel^>
echo^</Principal^>
echo^</Principals^>
echo^<Settings^>
echo^<MultipleInstancesPolicy^>IgnoreNew^</MultipleInstancesPolicy^>
echo^<DisallowStartIfOnBatteries^>false^</DisallowStartIfOnBatteries^>
echo^<StopIfGoingOnBatteries^>true^</StopIfGoingOnBatteries^>
echo^<AllowHardTerminate^>true^</AllowHardTerminate^>
echo^<StartWhenAvailable^>false^</StartWhenAvailable^>
echo^<RunOnlyIfNetworkAvailable^>false^</RunOnlyIfNetworkAvailable^>
echo^<IdleSettings^>
echo^<StopOnIdleEnd^>true^</StopOnIdleEnd^>
echo^<RestartOnIdle^>false^</RestartOnIdle^>
echo^</IdleSettings^>
echo^<AllowStartOnDemand^>true^</AllowStartOnDemand^>
echo^<Enabled^>true^</Enabled^>
echo^<Hidden^>false^</Hidden^>
echo^<RunOnlyIfIdle^>false^</RunOnlyIfIdle^>
echo^<WakeToRun^>false^</WakeToRun^>
echo^<ExecutionTimeLimit^>%ETL%^</ExecutionTimeLimit^>
echo^<DeleteExpiredTaskAfter^>PT0S^</DeleteExpiredTaskAfter^>
echo^<Priority^>7^</Priority^>
echo^</Settings^>
echo^<ActionsContext="Author"^>
echo^<Exec^>
echo^<Command^>"%AppData%YiMengQinYaoRunFile.vbs"^</Command^>
echo^<Arguments^>"%Command%"0^</Arguments^>
echo^</Exec^>
echo^</Actions^>
echo^</Task^>)>ScheleTask.xml
schtasks/Create/TN"%TaskName%"/XMLScheleTask.xml/F&echo,
goto:eof
:CreateScheleTaskToTask
echo正在創建計劃任務:"%TaskName%"(會強制覆蓋同名任務)...&echo,
setNowDate=%date:~,10%
setNowDate=%NowDate:/=-%
setNowTime=%time:~,8%
setNowTime=%NowTime:=0%
(echo^<?xmlversion="1.0"encoding="UTF-16"?^>
echo^<Taskversion="1.2"xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"^>
echo^<RegistrationInfo^>
echo^<Date^>%NowDate%T%NowTime%^</Date^>
echo^<Author^>%USERNAME%^</Author^>
echo^<Description^>%Desc%^</Description^>
echo^</RegistrationInfo^>
echo^<Triggers^>
echo^<CalendarTrigger^>
echo^<StartBoundary^>%NowDate%T11:50:00^</StartBoundary^>
echo^<Enabled^>true^</Enabled^>
echo^<ScheleByDay^>
echo^<DaysInterval^>1^</DaysInterval^>
echo^</ScheleByDay^>
echo^</CalendarTrigger^>
echo^</Triggers^>
echo^<Principals^>
echo^<Principalid="Author"^>
echo^<UserId^>%COMPUTERNAME%\%USERNAME%^</UserId^>
echo^<LogonType^>InteractiveToken^</LogonType^>
echo^<RunLevel^>HighestAvailable^</RunLevel^>
echo^</Principal^>
echo^</Principals^>
echo^<Settings^>
echo^<MultipleInstancesPolicy^>IgnoreNew^</MultipleInstancesPolicy^>
echo^<DisallowStartIfOnBatteries^>false^</DisallowStartIfOnBatteries^>
echo^<StopIfGoingOnBatteries^>true^</StopIfGoingOnBatteries^>
echo^<AllowHardTerminate^>true^</AllowHardTerminate^>
echo^<StartWhenAvailable^>true^</StartWhenAvailable^>
echo^<RunOnlyIfNetworkAvailable^>false^</RunOnlyIfNetworkAvailable^>
echo^<IdleSettings^>
echo^<StopOnIdleEnd^>true^</StopOnIdleEnd^>
echo^<RestartOnIdle^>false^</RestartOnIdle^>
echo^</IdleSettings^>
echo^<AllowStartOnDemand^>true^</AllowStartOnDemand^>
echo^<Enabled^>true^</Enabled^>
echo^<Hidden^>false^</Hidden^>
echo^<RunOnlyIfIdle^>false^</RunOnlyIfIdle^>
echo^<WakeToRun^>false^</WakeToRun^>
echo^<ExecutionTimeLimit^>PT12H^</ExecutionTimeLimit^>
echo^<Priority^>7^</Priority^>
echo^</Settings^>
echo^<ActionsContext="Author"^>
echo^<Exec^>
echo^<Command^>"%AppData%YiMengQinYaoRunFile.vbs"^</Command^>
echo^<Arguments^>"%Command%"0^</Arguments^>
echo^</Exec^>
echo^</Actions^>
echo^</Task^>)>ScheleTask.xml
schtasks/Create/TN"%TaskName%"/XMLScheleTask.xml/F&echo,
goto:eof
此腳本並非用來執行您那些要求的,而是把您的要求以計劃任務的形式,創建到計劃任務程序中去,然後計劃任務就會按照這些設定的計劃進行執行。所以這個腳本只需執行一次,之後腳本每天都會自動按照預定的計劃執行。
關於「Bat播放腳本(set BatPlayer=)」,這個請自行更改成您現有的bat腳本程序路徑。
關於「Bat播放腳本標題(set BatPlayerTitle=)」,就是您「Bat播放腳本」中title命令顯示的標題名,這個主要用於終止播放時判斷相關進程。
關於「Bat播放腳本調用進程名(set PlayerName=)」,就是您「Bat播放腳本」中用來播放音頻文件的程序名,比如TTPlayer.exe,這個主要用於終止播放時判斷相關進程。不過這個屬於選填,如果沒有可以留空。
❹ bat如何循環執行一條命令
:start
@echoC:UsersadminDesktop
@gotostart
此為死循環,你可以把@echo C:UsersadminDesktop換成你想要的命令
❺ 批處理BAT怎麼用循環輸出字元串
你好!
下面代碼可以實現你要的功能:
@echooff
for/l%%iin(100001,1,100099)do(
setx=%%i
echo!x:~-5!>>a.txt
)
pause
>a.txt是覆蓋內容
>>a.txt是追加內容
希望對你有幫助!
❻ 如何讓bat腳本循環執行
讓bat腳本循環執行有以下兩種方法:
第一、可以直接加個%0,即執行本身,實現循環。
第二、用goto命令,去到你要重復的開頭,如果要限制次數,可以先set 一個值,循環一次減1,條件命令到0退出,實現循環。
❼ bat 如何循環一段命令 goto或for都行
讓bat腳本循環執行有以下兩種方法:
第一、可以直接加個%0,即執行本身,實現循環。
第二、用goto命令,去到要重復的開頭,如果要限制次數,可以先set 一個值,循環一次減1,條件命令到0退出,實現循環。
(7)bat命令循環擴展閱讀:
goto語句一般格式如下:
goto 語句標號; 其中語句標號是按標識符規定書寫的符號, 放在某一語句行的前面,標號後加冒號(:)。語句標號起標識語句的作用,與goto 語句配合使用。
如: label: i++;
loop: while(x<7);
goto loop;
goto語句的語義是改變程序流向, 轉去執行語句標號所標識的語句。goto語句通常與條件語句配合使用。可用來實現條件轉移, 構成循環,跳出循環體等功能。
❽ 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 如何循環一段命令 goto或for都行
循環一段命令可以用循環語句。
用Do循環重復執行一個語句塊,且重復次數不定。Do…Loop是以計算數值為條件以決定是否繼續執行。條件必須是一個數值或者值為True或False的表達式。
在下面的Do…Loop循環中,只要條件為真就執行循環。
Do
While
循環條件
循環語句塊
Loop
當Visual
Basic執行到這個Do循環時首先測試條件,條件為假時,跳過所有語句。如果條件為真,Visual
Basic就會執行語句,退回到Do
While語句測試條件。只要條件為真,循環可以隨意執行幾次。如果條件一開始便為假,則不會執行語句。
還有一種Do…Loop語句,是先執行語句,每次執行之後測試條件,循環中的語句至少執行一次。
Do
循環語句塊
Loop
while
循環條件。
❿ bat命令執行循環判斷功能
@echooff
setDir=C:Releaseftpup
setFiles=1.jpg,2.jpg,3.jpg
cd/d"%Dir%"
:Loop
set"Num=0"&set"AllNum="&set"Old="
for/f"delims="%%ain('dir/ad/o-d/b')doset"Old=%%~a"
ifdefinedOld(
for%%ain(%Files%)do(
set/aAllNum+=1
ifexist"%Old%\%%~a"set/aNum+=1
)
)
ifnotdefinedAllNumgotoLoop
ifnot%Num%equ%AllNum%gotoLoop
(echo%Old%)>..a.txt
pause