标题: [文本处理] 求教for命令如何读取文本指定行及变量的使用方式 [打印本页]
作者: xinfeng 时间: 2016-8-30 14:19 标题: 求教for命令如何读取文本指定行及变量的使用方式
本帖最后由 xinfeng 于 2016-8-31 15:37 编辑
用for 打开文本里网址列表时的问题
在1.txt里有三行,三个网址.码如下:- @echo off
- for /f "delims=" %%i in (1.txt) do (
- start "" "D:\Program Files\firefox\firefox.exe" %%i
- ::set /a i=%i%+1
- echo %%i
- ping -n 3 127.1>nul
- )
- 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% ?- @echo off
- for /f "tokens=5 delims= " %%i in (2.txt) do (set j=%%i)
- set k=%j:~,8%
- echo %k%
- pause
复制代码
多谢!
作者: Batcher 时间: 2016-8-30 18:00
1) tokens=2 表示获取第二列,而不是第二行
2) ::表示注释,另外这个 set /a 命令在此代码中没有任何作用,可以删掉
3) for 命令的控制变量用 %%i,其它普通变量用 %k%
参考教程:
http://bbs.bathome.net/thread-31727-1-1.html
作者: xinfeng 时间: 2016-8-31 15:34
1) tokens=2 表示获取第二列,而不是第二行
2) ::表示注释,另外这个 set /a 命令在此代码中没有任何作用, ...
Batcher 发表于 2016-8-30 18:00
2) ::表注释我知道,我的疑惑是,让这一行生效时,即去掉:: 后, set /a为何没有作用? For 循环里不用像vb或c语言中手动让变量增加以进行下一次循环吗?
3) echo %%i 是因为在for 循环的do()括号内部,所以用%%i, 后面那一段用echo %k%, 是因为读k值时,已经循环结束了. 是这么理解吗?
多谢!
作者: GNU 时间: 2016-8-31 15:53
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in (1.txt) do (
start "" "D:\Program Files\firefox\firefox.exe" %%i
set /a n+=1
echo Number: !n!
echo %%i
ping -n 3 127.1 >nul
)
pause
你体会一下这个效果
作者: xinfeng 时间: 2016-8-31 16:07
回复 4# GNU
不赋初值直接用的变量,默认值为1?
你这个没解答我的疑惑啊....
还是多谢.
作者: GNU 时间: 2016-8-31 16:28
回复 5# xinfeng - @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in (1.txt) do (
- start "" "D:\Program Files\firefox\firefox.exe" %%i
- set /a i+=1
- echo Number: !i!
- REM 自定义变量 !i! 和 for循环的控制变量 %%i 是两个不同的东西
- echo %%i
- ping -n 3 127.1 >nul
- )
- pause
复制代码
这样能解惑吗?
作者: xinfeng 时间: 2016-9-1 17:07
回复 6# GNU
有点明白,还有点晕.
自定义变量 !i! 和 for循环的控制变量 %%i 是两个不同的东西
那后面怎么分别引用?就看用的是双叹号还是%%?
作者: happy886rr 时间: 2016-9-1 17:18
回复 7# xinfeng
%%i的生命只在for循环里存在,出了for循环,%%i这个变量就不存在了,而!i!是全局变量,会一直存在下去。注意每个变量的生命周期,在它活着的时候引用。
作者: GNU 时间: 2016-9-1 19:19
回复 7# xinfeng
你3楼已经说了,%%i只能在for循环内部使用,不能直接在for循环外部引用。
!i!作为普通的自定义变量,可以在for循环外部引用。
如果仍有疑惑,请把你的代码和你想实现的目标分别发出来看看。
作者: xinfeng 时间: 2016-9-2 08:34
回复 8# happy886rr
谢谢. 我的理解是for...do() 这个语句的do()括号里面的内容都属于循环体内. 不是这样的?
作者: xinfeng 时间: 2016-9-2 08:34
回复 9# GNU
代码就是主楼那段, 要实现的是把一个文档内的网址按行依次打开.
你用!i!的时候,是在for...do() 这个语句的do()括号里面, 这时就不算for循环了吗?我的理解是整个括号里的内容都是循环体内.
作者: GNU 时间: 2016-9-2 10:30
回复 11# xinfeng
是的,整个括号里的内容都是循环体内。
对的,批处理的 for 循环不用手动到下一个的。因此代码里面 set /a i+=1 没有任何意义
建议看看 for 命令教程吧
http://bbs.bathome.net/thread-31727-1-1.html
作者: xinfeng 时间: 2016-9-26 13:07
回复 12# GNU
REM 自定义变量 !i! 和 for循环的控制变量 %%i 是两个不同的东西
既然在括号内的都算for循环, 那不就在一个循环内有两个变量 i 了吗?一个通过%%引用,一个用!!引用.
那个帮助文档看过,没解释的这么细.
作者: GNU 时间: 2016-9-26 21:45
回复 13# xinfeng
对的,两个变量i,通过不同的方式引用会得到不同的值。
教程这东西吧,每隔一段时间复习一遍,总会有不同的体会和收获。
作者: xinfeng 时间: 2016-9-27 20:07
回复 14# GNU
好吧, 引用方式不同,引用的变量也跟着不同,刚接触还有点难理解. 慢慢熟悉吧. 多谢了.
作者: idos 时间: 2016-9-27 21:41
回复 3# xinfeng
谁告诉你C语言或者VB语言用手动增加变量值了,C语言也有循环,循环里变量值可以增加或者减少.......
作者: xinfeng 时间: 2016-9-29 15:01
回复 16# idos
我的意思是,C里面必须显式地用i++之类的使变量变化. 但批处理不用啊
作者: winsfly 时间: 2016-9-29 17:26
- @echo off
- title 禁止关闭!!!
- mode con lines=1 cols=20
- REM 几十个供销商网站地址全部放到URL.txt里面,每行一个网址
- taskkill /f /im iexplore.exe
- for /f "tokens=1 delims=\" %%i in ('type "URL.txt"') do (
- call :OpenURL "%%i"
- )
- goto :eof
-
- :OpenURL
- start "" "%systemdrive%\Program Files\Internet Explorer\iexplore.exe" %1
-
- :CheckProc
- tasklist /nh | find /i "iexplore.exe"
- if errorlevel 1 (
- goto :eof
- ) else (
- goto :CheckProc
- )
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |