[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 求教for命令如何读取文本指定行及变量的使用方式

本帖最后由 xinfeng 于 2016-8-31 15:37 编辑

用for 打开文本里网址列表时的问题
在1.txt里有三行,三个网址.码如下:
  1. @echo off
  2. for /f "delims=" %%i in (1.txt) do (
  3. start "" "D:\Program Files\firefox\firefox.exe" %%i
  4. ::set /a i=%i%+1
  5. echo %%i
  6. ping -n 3 127.1>nul
  7. )
  8. pause
复制代码
运行后输出:
http://www.baidu.com
http://www.sina.com
http://www.163.com
Press any key to continue . . .
且能正确打开网页.

我的疑问:
1)如果我只想打开新浪, 把第二行改为: for /f "tokens=2 delims=" %%i in (1.txt) do (   结果什么都打不开.为何?
2)第四行  ::set /a i=%i%+1 ,这一行好像不起作用啊,加不加双冒号,效果一样?批处理的for 循环不用手动到下一个的?
3)echo %%i 这个, %%i,%i%,%i,到现在还是一头雾水.这里为什么不能写成%i%? 为什么下面这一小段用来从TIME 中取当前时间(精确到秒)的代码里,用的是%k% ?
  1. @echo off
  2.   for /f "tokens=5 delims= " %%i in (2.txt) do (set j=%%i)
  3.   set k=%j:~,8%
  4.   echo %k%
  5.   pause
复制代码
多谢!

  1. @echo off
  2. title 禁止关闭!!!
  3. mode con lines=1 cols=20
  4. REM 几十个供销商网站地址全部放到URL.txt里面,每行一个网址
  5. taskkill /f /im iexplore.exe
  6. for /f "tokens=1 delims=\" %%i in ('type "URL.txt"') do (
  7.     call :OpenURL "%%i"
  8. )
  9. goto :eof
  10. :OpenURL
  11. start "" "%systemdrive%\Program Files\Internet Explorer\iexplore.exe" %1
  12. :CheckProc
  13. tasklist /nh | find /i "iexplore.exe"
  14. if errorlevel 1 (
  15.     goto :eof
  16. ) else (
  17.     goto :CheckProc
  18. )
复制代码

TOP

回复 16# idos


    我的意思是,C里面必须显式地用i++之类的使变量变化.  但批处理不用啊

TOP

回复 3# xinfeng


    谁告诉你C语言或者VB语言用手动增加变量值了,C语言也有循环,循环里变量值可以增加或者减少.......

TOP

回复 14# GNU


    好吧, 引用方式不同,引用的变量也跟着不同,刚接触还有点难理解. 慢慢熟悉吧. 多谢了.

TOP

回复 13# xinfeng


对的,两个变量i,通过不同的方式引用会得到不同的值。
教程这东西吧,每隔一段时间复习一遍,总会有不同的体会和收获。

TOP

回复 12# GNU


    REM 自定义变量 !i! 和 for循环的控制变量 %%i 是两个不同的东西
既然在括号内的都算for循环, 那不就在一个循环内有两个变量 i 了吗?一个通过%%引用,一个用!!引用.
那个帮助文档看过,没解释的这么细.

TOP

回复 11# xinfeng


是的,整个括号里的内容都是循环体内。
对的,批处理的 for 循环不用手动到下一个的。因此代码里面 set /a i+=1 没有任何意义

建议看看 for 命令教程吧
http://bbs.bathome.net/thread-31727-1-1.html

TOP

回复 9# GNU


    代码就是主楼那段, 要实现的是把一个文档内的网址按行依次打开.
你用!i!的时候,是在for...do() 这个语句的do()括号里面, 这时就不算for循环了吗?我的理解是整个括号里的内容都是循环体内.

TOP

回复 8# happy886rr


    谢谢. 我的理解是for...do() 这个语句的do()括号里面的内容都属于循环体内. 不是这样的?

TOP

回复 7# xinfeng


你3楼已经说了,%%i只能在for循环内部使用,不能直接在for循环外部引用。
!i!作为普通的自定义变量,可以在for循环外部引用。

如果仍有疑惑,请把你的代码和你想实现的目标分别发出来看看。

TOP

回复 7# xinfeng
%%i的生命只在for循环里存在,出了for循环,%%i这个变量就不存在了,而!i!是全局变量,会一直存在下去。注意每个变量的生命周期,在它活着的时候引用。

TOP

回复 6# GNU


    有点明白,还有点晕.
自定义变量 !i! 和 for循环的控制变量 %%i 是两个不同的东西
那后面怎么分别引用?就看用的是双叹号还是%%?

TOP

回复 5# xinfeng
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (1.txt) do (
  4.     start "" "D:\Program Files\firefox\firefox.exe" %%i
  5.     set /a i+=1
  6.     echo Number: !i!
  7.     REM 自定义变量 !i! 和 for循环的控制变量 %%i 是两个不同的东西
  8.     echo %%i
  9.     ping -n 3 127.1 >nul
  10. )
  11. pause
复制代码
这样能解惑吗?

TOP

回复 4# GNU

不赋初值直接用的变量,默认值为1?
你这个没解答我的疑惑啊....
还是多谢.

TOP

返回列表