bat腳本while
① 如何讓bat腳本循環執行
讓bat腳本循環執行有以下兩種方法:
第一、可以直接加個%0,即執行本身,實現循環。
第二、用goto命令,去到你要重復的開頭,如果要限制次數,可以先set 一個值,循環一次減1,條件命令到0退出,實現循環。
② 批處理BAT怎麼用循環輸出字元串
你好!
下面代碼可以實現你要的功能:
@echooff
for/l%%iin(100001,1,100099)do(
setx=%%i
echo!x:~-5!>>a.txt
)
pause
>a.txt是覆蓋內容
>>a.txt是追加內容
希望對你有幫助!
③ 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腳本循環執行有以下兩種方法:
第一、可以直接加個%0,即執行本身,實現循環。
第二、用goto命令,去到要重復的開頭,如果要限制次數,可以先set 一個值,循環一次減1,條件命令到0退出,實現循環。
(4)bat腳本while擴展閱讀:
goto語句一般格式如下:
goto 語句標號; 其中語句標號是按標識符規定書寫的符號, 放在某一語句行的前面,標號後加冒號(:)。語句標號起標識語句的作用,與goto 語句配合使用。
如: label: i++;
loop: while(x<7);
goto loop;
goto語句的語義是改變程序流向, 轉去執行語句標號所標識的語句。goto語句通常與條件語句配合使用。可用來實現條件轉移, 構成循環,跳出循環體等功能。
⑤ bat腳本批量修改文件名中的大寫字母為小寫字母
批量將文件名修改為小寫的方法:
步驟1,下載「優速文件批量重命名」軟體後安裝打開,然後點擊左上角的【添加文件】按鈕,將需要修改名稱的文件全部添加到軟體中。也可以直接拖動文件到軟體里進行添加。
⑥ bat腳本,匹配所有含有關鍵字的行,在行後增加一段字元串,現在這個腳本只能匹配到首個關鍵字行。
/*&cls
@echooff
set@=q&set/an=0x53b7e0b4
title%@%%@%%n%
cd/d"%~dp0"
dir/a-d/b"文本.txt"|cscript-nologo-e:jscript"%~f0""關鍵詞""添加的內容"
pause&exit
*/
varfso=newActiveXObject('Scripting.FileSystemObject');
varkeyword=WSH.Arguments(0);
varaddstr=WSH.Arguments(1);
while(!WSH.StdIn.AtEndOfStream){
varfile=WSH.StdIn.ReadLine();
WSH.Echo(file);
vartxt=read(file);
write(txt,file);
}
functionread(file){
vars='';
varf=fso.OpenTextFile(file,1);
while(!f.AtEndOfStream){
varline=f.ReadLine();
s+=(line.indexOf(keyword)>-1?line+addstr:line)+' ';
}
f.Close();
returns;
}
functionwrite(text,file){
varf=fso.CreateTextFile(file,2);
f.Write(text);
f.Close();
}
⑦ 如何讓bat腳本循環執行
讓bat腳本循環執行有以下兩種方法:
第一、可以直接加個%0,即執行本身,實現循環。
第二、用goto命令,去到你要重復的開頭,如果要限制次數,可以先set 一個值,循環一次減1,條件命令到0退出,實現循環。
⑧ 如何使用bat腳本獲取電腦上所有windows服務的信息
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::
::獲取本機服務列表By依夢琴瑤2017-3-25
::
::
::如非必要,請勿隨意修改代碼,以免運行出錯。
::尊重勞動成果,保留版權聲明。
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echooff&
cd/d%~dp0&setPROG=獲取本機服務列表
ifnot"%~n0"=="%PROG%"move/y"%~0""%PROG%%~x0">nul&start"""%PROG%%~x0"
color0a&title%PROG%By依夢琴瑤
echo正在努力獲取本機服務列表,請稍後。。。
(echo顯示名稱^|^|^|^|服務名稱^|^|^|^|描述^|^|^|^|狀態^|^|^|^|啟動類型^|^|^|^|登錄為^|^|^|^|執行路徑
for/f"tokens=2*delims=:"%%ain('scquerystate^=all^|findstr"^SERVICE_NAME:<STATE"')do(
for%%cin(DISPLAY_NAME,SERVICE_NAME,DESCRIPTION,STATE,START_TYPE,SERVICE_START_NAME,BINARY_PATH_NAME)doifnotdefined%%cset"%%c=(無)"
set/aNum+=1
if!Num!equ2(
echo"%%a"|findstr"RUNNING">nul&&set"STATE=已啟動"||set"STATE=已停止"
setNum=0
echo!DISPLAY_NAME!^|^|^|^|!SERVICE_NAME!^|^|^|^|!DESCRIPTION!^|^|^|^|!STATE!^|^|^|^|!START_TYPE!^|^|^|^|!SERVICE_START_NAME!^|^|^|^|!BINARY_PATH_NAME!
)else(
for/f"tokens=2*delims=:"%%bin('scqdescription%%a')do(
set"DESCRIPTION=%%b"
set"DESCRIPTION=!DESCRIPTION:~2!"
)
for/f"tokens=2*delims=="%%bin('scGetDisplayName%%a')do(
set"DISPLAY_NAME=%%b"
set"DISPLAY_NAME=!DISPLAY_NAME:~1!"
)
for/f"delims="%%bin('scqc%%a^|findstr"<START_TYPE<BINARY_PATH_NAME<SERVICE_START_NAME"')do(
set/aCut+=1
if!Cut!equ3(
echo"%%b"|findstr/i"LocalService">nul&&set"SERVICE_START_NAME=本地服務"||(
echo"%%b"|findstr/i"LocalSystem">nul&&set"SERVICE_START_NAME=本地系統"||(
echo"%%b"|findstr/i"NetworkService">nul&&set"SERVICE_START_NAME=網路服務"||(
set"SERVICE_START_NAME=%%b"
set"SERVICE_START_NAME=!SERVICE_START_NAME:SERVICE_START_NAME:=!"
)
)
)
setCut=0
)else(
if!Cut!equ2(
set"BINARY_PATH_NAME=%%b"
set"BINARY_PATH_NAME=!BINARY_PATH_NAME:BINARY_PATH_NAME:=!"
)else(
echo"%%b"|findstr"DELAYED">nul&&set"START_TYPE=自動(延遲啟動)"||(
echo"%%b"|findstr"AUTO_START">nul&&set"START_TYPE=自動"||(
echo"%%b"|findstr"DEMAND_START">nul&&set"START_TYPE=手動"||set"START_TYPE=禁用"
)
)
)
)
)
set"SERVICE_NAME=%%a"
set"SERVICE_NAME=!SERVICE_NAME:~1!"
)
))>ymqy.$
:SortingList
for/f"skip=1tokens=1delims=[]"%%ain('find/n"::SortingListVBS::""%~0"')dosetLine=%%~a
more+%Line%"%~0">Sorting.VBS
(cscript//nologo//e:jscript"Sorting.VBS"<ymqy.$)>"%~dp0%COMPUTERNAME%_服務列表.Log"
del/f/qymqy.$Sorting.VBS
cls&echo本機服務列表已輸出至"%~dp0%COMPUTERNAME%_服務列表.Log"
echo,&echo請按任意建退出&pause>nul
exit
::SortingListVBS::
vari=0,arr=[],max=[];
varreg=/[^x00-xff]/g;
while(!WSH.StdIn.AtEndOfStream){
varstrLine=WSH.StdIn.ReadLine();
if(!/^s*$/.test(strLine)){
arr[i]=strLine.split('||');
for(varj=0;j<arr[i].length;j++){
varlen=arr[i][j].replace(reg,'..').length;
if(!max[j]||len>max[j])max[j]=len;
}
i++;
}
}
for(vari=0;i<arr.length;i++){
vars='';
for(varj=0;j<arr[i].length;j++){
varlen=max[j]-arr[i][j].replace(reg,'..').length;
varspace='';
for(vark=0;k<len;k++)space+='';
s+=arr[i][j]+space;
}
WScript.Echo(s);
}
遲到的回答,實在抱歉,事兒有點多。生成的列表信息保存在腳本目錄下,名字為當前系統的本機名。後綴為Log。
你運行,看看符不符合你的要求。
⑨ bat批處理中怎樣用while循環
bat 常用命令 echo、@、call、pause、rem(小技巧:用::代替rem)是批處理文件最常用的幾個命令,我們就從他們開始學起
⑩ 請問下為什麼用bat腳本,批量刪除文件名的中括弧,會失敗請問是代碼錯誤嗎有什麼辦法嗎SOS!
因為您的文件夾名中包含空格,這個時候您使用的for命令,由於沒加相關參數,導致名稱會被分割,所以最終重命名失敗。
如果您僅處理文件夾名,那麼請給for添加一個/d參數。如下:
for /d %%a in (*) do
如果僅處理文件名,那麼需要使用for+dir的方式,如下:
for /f "delims=" %%a in ('dir /a-d/b *') do
這樣才能避免名稱有空格而被分割的情況。