网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月04日漏签0天
bat吧 关注:16,746贴子:231,841
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1 2 下一页 尾页
  • 140回复贴,共2页
  • ,跳到 页  
<<返回bat吧
>0< 加载中...

【教程】for命令-从入门到精通

  • 只看楼主
  • 收藏

  • 回复
  • 幻虚道长
  • Ntsd
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我相信大多数人对于for都是似懂非懂……主要原因就是,大多数教程为求懒求快,直接复制for /?的机器翻译,导致基本没人看得懂……本文承诺:绝不使用机器翻译帮助,有问必答,祝大家学习愉快。


  • 12321frfsfsfsf
  • Taskkill
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
抢楼,对了,楼主,发呀


2025-07-04 11:25:32
广告
  • 幻虚道长
  • Ntsd
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1.批量执行 for [/D] [/R [路径]] %%变量 in (集合) do (命令)
/D  只搜索文件夹名[可选],若无该选项即为 只搜索文件名
/R [路径]  搜索子目录[可选]
路径  搜索指定目录[可选](这个鸡肋参数要求必须开启 搜索子目录 才能用,若想指定搜索目录普遍做法是先用cd /d跳转目录)若无该选项即为 搜索当前目录
%%变量  只能是一个字母,用于在命令中使用,代表搜索结果。(该变量是全局的!)
集合  指定一个或一组文件。可以使用通配符搜索。(也可以指定文本,用空格分隔,特殊文本用双引号括住)(通配符*表示0个或多个字符,通配符?表示0个或1个字符)
命令  指定批量执行的命令。使用%%变量 指定搜索结果。
@echo off
for %%i in (*.bat) do (echo %%i)
::这段代码会显示当前文件夹(不含子文件夹)下所有的bat文件的文件名
for %%i in (菜 芽 小 公 公) do echo %%i
pause>nul
::这段代码会显示什么?试试看!
注意:for搜索并不会搜索隐藏文件,因此若要搜索隐藏文件……过会儿再讲
作业:按Win+R键运行cmd,然后自行思索命令怎么写
1.搜索当前目录,目录名中包含es的目录,并显示出来
2.搜索子文件夹Desktop,包含子目录,并计算出该目录一共有多少文件。(set /a a+=1会用吧?不会就算了,显示出来也行)(本题不得使用cd跳转目录!)
3.分析下列代码,并尝试制作一个 [请输入多个数字,用空格隔开,输出这些数的乘积] 计算工具
set c=1
for %%i in (2 3 5 7 11 13 17 19 23 29 31 37) do set /a c*=%%i


  • 幻虚道长
  • Ntsd
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
2.等差数列 for /L %%变量 in (开始,间隔,结束) do (命令)
(开始,间隔,结束)表示从开始到结束的一个数列,间隔为数列差。因此,(1,2,10)将产生序列
(1 3 5 7 9),(5,-1,1)将产生序列(5 4 3 2 1)
[命令行]连续打开10个cmd窗口。
for /L %a in (1,1,10) do start cmd
[批处理]生成一个100-200的数列,间隔为5
for /L %%a in (100 5 200) do echo %%a
这个命令很简单啦,没啥解释的
作业:使用for /L命令制作一个[阶乘计算工具](10的阶乘=10*9*8*7*……*2*1)
上期答案
1. for /D %i in (*es*) do (echo %i)
2. for /R Desktop %i in (*) do set /a a+=1
3.
@echo off
:1
set /p a=请输入多个数字,用空格隔开=
set c=1
for %%i in (%a%) do set /a c*=%%i
echo %a%的乘积=%c%
goto 1
答案仅供参考,不要求完全一致。
(楼主原创出品,刚刚写的)


  • 幻虚道长
  • Ntsd
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

上期答案
@echo off
:1
set /p a=请输入数字=
set c=1
for /L %%i in (1,1,%a%) do set /a c*=%%i
echo %a%的阶乘=%c%
goto 1
答案仅供参考,不要求完全一致。


  • 幻虚道长
  • Ntsd
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
综合小节
1.批量执行/文件搜索
for  [/D]    [/R    [路径]]  %%变量  in  (集合)  do  (命令)
  文件夹 子文件夹 指定目录  单字母   搜索/文本     批量
2.等差数列
 for /L  %%变量 in  (开始,间隔,结束)  do  (命令)
等差数列 单字母    开始,间隔,结束    批量
3.文本处理
 for /F  ["选项"]  %%变量  in   (集合)   do  (命令)
文本处理  选项  单字母   搜索/"文本"/'命令'  批量
for /F "eol=! skip=n delims= -x tokens=1,7-9* usebackq" %%变量 in (集合) do (命令)
   注释   行   分隔符    列     新语法
高级用法
1.文件搜索
可以指定多个搜索目标,用空格隔开,比如这样(for命令会对每个搜索目标都搜索一遍)
for /D %i in (*es* a* Deskto?) do (echo %i)
当没有搜索到目标时,输出搜索目标。因此for也支持 集合 内容为文本
for %%i in (菜 芽 "小 公 公") do echo %%i
3.文本处理
使用goto跳转,即可实现只读取一行。
for /F "skip=3 delims=" %%i in (test.txt) do echo %%i&set a=%%i&goto 1
:1
for /F "skip=1 tokens=2 delims= " %%i in ('net user "%username%"') do set a=%%i&goto 2
:2
echo 中文用户名:%a: =%
由于for /f支持读取 命令输出,所以for不能搜索隐藏文件的缺点可以借此部分修复。
for /f "delims=" %%i in ('dibubr /ah /s/b') do attrib "%%i" -s -h -r


  • 12321frfsfsfsf
  • Taskkill
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
楼主,申请加精


  • 幻虚道长
  • Ntsd
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
变量扩展
大家知道,在cmd中执行for命令,变量用%i表示,而在bat中,变量用%%i表示。(这是为什么呢?学完这课大家就会懂了)
1.变量的范围
数字计算[±21 4748 3647 整数],文本[8191个字节](set /p a=<文件 和 ^换行符 可突破该限制,暂不解释)
2.变量的命名
不允许使用纯数字
不建议使用单字母变量
命名不区分大小写
3.变量扩展-文本(以下示例均以变量%a%示范,实际变量名可以为任何值)
%a:文本1=文本2% 文本1替换为文本2(文本2可留空,如%a:文本1=%)
%a:*文本1=文本2% 开头到文本1第一次出现的地方替换为文本2(文本2可留空)
%a:~10% 第10个字之后的内容
%a:~-10% 倒数第10个字之后的内容
%a:~,5% 开头之后的5个字
%a:~,-5% 倒数第5个字之前的字
%a:~10,5% 第10个字之后的5个字
%a:~10,-5% 第10个字之后,倒数第5个字之前的字
%a:~-10,5% 倒数第10个字之后的5个字
%a:~-10,-5% 倒数第10个字之后,倒数第5个字之前的字
注:文本扩展在for命令中可能不可用
示范:set a=%a:~-10,-5%


2025-07-04 11:19:32
广告
  • 幻虚道长
  • Ntsd
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
4.变量扩展-延迟(在批处理开头加上一行etlocal enabledelayedexpansion即可)
@echo off
set num=10
set num=100 & echo %num%
echo %num%
echo 虽然已经将num的值更改为100,但由于没有延迟扩展,所以值仍为10,不过在下一个语句num的值就改变了
pause
@echo off
SetLocal EnableDelayedExpansion
set num=10
set num=100 & echo !num!
echo 现在两个num的值一样了(注意%num%变成了!num!)
echo %num%
pause
更复杂的写法
set q=!tem%c%!
set a=!aa:~%bb%,10!
set b=!a:%文本1%=%文本2%!
注意:延迟扩展与call的冲突
@echo off&setlocal enabledelayedexpansion
call :1
echo %a%&pause
:1
setlocal enabledelayedexpansion&echo 运行一遍,然后删除本行,再运行一遍。
set a=欢迎光临
exit /b
保留第五行,输出错误结果;删除第五行,输出正确结果 欢迎光临
结论:使用call跳转标签或文件时,需确保目标无“setlocal enabledelayedexpansion”,否则将产生错误
若必须保留setlocal enabledelayedexpansion这一行,可参考解决方案
方案1:
@ echo off
setlocal enabledelayedexpansion
call :1 1
echo %a%&pause
:1
if not #%*==# goto 2
setlocal enabledelayedexpansion
:2
set a=欢迎光临
exit /b
方案2:
@ echo off
setlocal enabledelayedexpansion
call :1
for /F "delims=" %%i in (a) do set %%i
echo %a%&pause
:1
setlocal enabledelayedexpansion
set a=欢迎光临
(set)>a
goto :eof
汇总小节
 for   [/D]   [/R   [路径]]  %%变量 in (集合)  do  (命令)
文件搜索 文件夹 子文件夹 指定目录 单字母   搜索/文本    批量
 for /L %%变量 in (开始,间隔,结束)  do  (命令)
等差数列 单字母    开始,间隔,结束     批量
 for /F ["选项"] %%变量  in    (集合)    do  (命令)
文本处理  选项  单字母   搜索/"文本"/'命令'    批量
 for /F "eol=! skip=n delims= -x tokens=1,7-9*     usebackq     "
选项   注释   行   分隔符     列    新语法("搜索"/'文本'/`命令`)
 %a:文本1=文本2% %a:~10,5% %CD% %DATE% %TIME% %RANDOM%
    替换      截取  当前目录  日期   时间    随机数


  • 孙坨坨
  • For
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
暖


  • -0oO0o-
  • Taskkill
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
up
 ้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็ ้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็ ้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็  ้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็  ้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็  ้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็


  • hi60year
  • Mode
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我知道for在c++里是循环


  • 法苏的哥
  • For
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
批处理对文本的大小好像也有要求吧!太大的文件会直接不运行。还有,我用cmos的时候要是我一直不点击。cpu马上烧起来。点了就好了。用的3.0版的因为2.0读不到100多的坐标。


  • 幻虚道长
  • Ntsd
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
936小程 [host]:原创求加精 @超人硬汉 @tmxk0411


2025-07-04 11:13:32
广告
  • olum-L
  • Ntsd
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
写的很好 收藏了 谢谢楼主


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 140回复贴,共2页
  • ,跳到 页  
<<返回bat吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示