标题: [文件操作] 求教批处理type, for /f 命令的几个问题。 [打印本页]
作者: smatenchen 时间: 2022-5-30 16:19 标题: 求教批处理type, for /f 命令的几个问题。
本帖最后由 smatenchen 于 2022-5-30 18:45 编辑
求教 type, for /f 命令的几个问题。
1
type命令输出的结果,可以用管道给其它命令做输入吗?
2
用for /f命令,可以做到,只读取第n行,而忽略其它行吗?
3
用for /f "delims=x",分隔字符后,可以在显示出的结果里把分隔符一同显示吗?
如用 echo %%i,但这只会把分隔好的段显示出来,而不会连带分隔符一同显示。
4
当然可以用 echo %%ix 的形式来凑合着用,但如果分隔符是多个字符呢?
用 echo %%ix 的形式,就不再管用了。
对此,有解法吗?
谢谢!
作者: qixiaobin0715 时间: 2022-5-30 16:40
比如读取第20行:- @echo off
- for /f "tokens=1* delims=:" %%i in ('findstr /n .* 1.txt^|findstr /b "20:"') do echo,%%j
- pause
复制代码
作者: Batcher 时间: 2022-5-30 16:50
比如读取第20行:- @echo off
- for /f "skip=19 delims=" %%a in ('type "1.txt"') do (
- echo,%%a
- goto :Next
- )
- :Next
- pause
复制代码
作者: qixiaobin0715 时间: 2022-5-30 17:03
回复 1# smatenchen
管道后面跟find、findstr命令应当没有问题,要看你怎么用。
作者: qixiaobin0715 时间: 2022-5-30 17:09
对第4条来说,不一定非要用for来实现,具体问题具体分析。如果一定要用的话,按照你的方法那就用单个分隔符多次使用for循环。
作者: smatenchen 时间: 2022-5-30 17:45
本帖最后由 smatenchen 于 2022-6-2 18:26 编辑
回复 2# qixiaobin0715
1
感谢大神提示。
2
tokens=1?,干嘛不tokens=2,直接把第2列交给%%i,再 echo %%i 呢?
3
findstr /n .* 1.txt,这里用了表达式吗?那这里不需要使用 /r 参数吗?
4
echo,%%j,echo后接了,号,这是何用意?是省了%%i然后再在后面跟着显示下一列%%j吗?
作者: smatenchen 时间: 2022-5-30 18:19
回复 3# Batcher
1
感谢大神。
2
用了goto :Next,跳出循环。
3
如果,是要读取第n行,第n+x行,第n+y行……等某些指定的行时呢?
鄙人,也曾想过用goto语句,但当需要读取多个指定的行时,它就不够用了。
作者: smatenchen 时间: 2022-5-30 18:42
本帖最后由 smatenchen 于 2022-5-31 08:58 编辑
回复 4# qixiaobin0715
1
感谢大神。
2
刚刚,鄙人试过了,type 后可以接 | 。
3
昨天,鄙人在 type 后用 | 接了 sort 命令,结果有点古怪,没弄明白,所以今天来了问大神们。
4
sort 命令会把原来的顺序打乱,这对于要用 for /f 读取文本里的前或后n行的操作,不利。
因为,它会打乱顺序,重排后,原来的前n行里的每一行都可能会被排到其它行的位次了。
对此,有解法吗?
作者: smatenchen 时间: 2022-5-30 18:49
回复 5# qixiaobin0715
1
感谢大神。
2
鄙人的办法比较笨拙。
3
【不一定非要用for来实现,】
你有其它思路吗?
有空时,请来继续讨论一下。
作者: Batcher 时间: 2022-5-31 08:21
回复 7# smatenchen
实现对文件指定行的读取的批处理小函数
http://bbs.bathome.net/thread-4450-1-1.html
作者: qixiaobin0715 时间: 2022-5-31 08:34
回复 6# smatenchen
这些问题论坛里都有教程,慢慢学习即可。多个指定行,比如第5、20、101行:- @echo off
- for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt^|findstr /b "5: 20: 101:"') do (
- echo,%%b
- )
- pause
复制代码
作者: smatenchen 时间: 2022-6-2 18:23
回复 2# qixiaobin0715 batcher
1
感谢大神!
2
('findstr /n .* 1.txt^|findstr /b "20:"')
这个巧妙啊!先编号,再读取,厉害!这样,要读取哪几行都行。很好用啊!
3
之前看错了,tokens=1*已是将第1列之后的列全看成是一个整体,交给了下一个变量。
echo,%%j 则不显示第1列,而直接跳显第2列及之后列组成的整体。
之前是鄙人没看懂。大神厉害啊!
4
假如,
硬是用delims=xyz把字符串分成了几列,如何用tokens=?将去掉了分隔符的字符串,
全部交给某个变量,再显示出来呢?
用tokens=*只会显示带有分隔符的整行,与没分隔前的一样。
求教大神!
作者: smatenchen 时间: 2022-6-2 18:51
回复 10# Batcher qixiaobin0715
1
感谢大神!
2
http://bbs.bathome.net/thread-4450-1-1.html
Call ReadLine,其中的ReadLine.Bat里的语句,没看懂。
%1,%2,%3,这些变量都没设,怎么就可以用if去调用呢?
set file=%~s1 这种运算变量的意义,鄙人还没看透。
3
大神,有空时,请对这个ReadLine.Bat里的语句,逐句分解一下吧!
作者: smatenchen 时间: 2022-6-2 19:59
回复 11# qixiaobin0715
1
感谢大神!
2
很好用啊!不错!
3
http://bbs.bathome.net/thread-4450-1-1.html
大神,有空时,请对这个ReadLine.Bat里的语句,逐句分解一下吧!
作者: Batcher 时间: 2022-6-2 20:06
回复 13# smatenchen
位置参数
http://bbs.bathome.net/thread-2782-1-1.html#pid22365
call命令教程
http://bbs.bathome.net/thread-14852-1-1.html
作者: smatenchen 时间: 2022-6-2 21:15
回复 15# Batcher
1
感谢大神!
2
非常有帮助!
作者: smatenchen 时间: 2022-7-17 19:59
回复 3# Batcher
比如读取第20行:
@echo off
for /f "skip=19 delims=" %%a in ('type "1.txt"') do (
echo,%%a
goto :Next
)
:Next
pause
1,
感谢大神!
2,
你的这个语句,不是只读取第20行吧?
3,
应该是,跳过前面的19行,从第20行开始往后读取每一行吧?
4,
这个差别,很大啊!
5,
鄙人理解的对吗?
请指点!谢谢!
作者: smatenchen 时间: 2022-7-17 20:28
回复 11# qixiaobin0715
这些问题论坛里都有教程,慢慢学习即可。多个指定行,比如第5、20、101行:
@echo off
for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt^|findstr /b "5: 20: 101:"') do (
echo,%%b
)
pause
1,
感谢大神!
2,
其中的 findstr /b "5: 20: 101:" ,假如,要找的字符串是 ab c 或 ab d 或 ab e ,
这样的3个中间有空格的字符串,用 findstr 命令,该如何表达呢?
3,
困扰了多时,请大神指点!
作者: Batcher 时间: 2022-7-18 10:06
回复 17# smatenchen
不要瞎猜,请亲自测试一下,看看结果如何。
作者: qixiaobin0715 时间: 2022-7-18 11:22
回复 18# smatenchen
这样的话,可以不用for循环:- findstr /c:"ab c" /c:"ab e" /c:"ab f" 1.txt
复制代码
作者: smatenchen 时间: 2022-7-19 19:36
回复 19# Batcher
1,
感谢大神!
2,
鄙人以前在第7楼,已回复过你了。
3,
近日,忽然又来逛一下了,就又发问了。
4,
只顾看for循环了,没留意你使用了goto语句。
作者: smatenchen 时间: 2022-7-19 19:44
回复 20# qixiaobin0715
1,
感谢大神!
2,
鄙人在帖里发问的那天的晚些时候,也试出了可以用多个/c:"ab e"这样的语句,来做或选。
3,
感谢提供解题方法!
作者: hfxiang 时间: 2022-7-22 14:49
回复 13# smatenchen
以下链接的“改进版ReadLine.bat”对%1、%2、%3有解释,并且消除原版中的部分缺陷
http://bbs.bathome.net/redirect. ... 7170&ptid=63161
作者: smatenchen 时间: 2022-7-22 15:13
回复 23# hfxiang
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |