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

[文件操作] 求教批处理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 的形式,就不再管用了。
对此,有解法吗?


谢谢!

回复 23# hfxiang

TOP

回复 13# smatenchen


    以下链接的“改进版ReadLine.bat”对%1、%2、%3有解释,并且消除原版中的部分缺陷
    http://bbs.bathome.net/redirect. ... 7170&ptid=63161

TOP

回复 20# qixiaobin0715



1,
感谢大神!


2,
鄙人在帖里发问的那天的晚些时候,也试出了可以用多个/c:"ab e"这样的语句,来做或选。


3,
感谢提供解题方法!

TOP

回复 19# Batcher



1,
感谢大神!


2,
鄙人以前在第7楼,已回复过你了。


3,
近日,忽然又来逛一下了,就又发问了。


4,
只顾看for循环了,没留意你使用了goto语句。

TOP

回复 18# smatenchen
这样的话,可以不用for循环:
  1. findstr /c:"ab c" /c:"ab e" /c:"ab f" 1.txt
复制代码

TOP

回复 17# smatenchen


    不要瞎猜,请亲自测试一下,看看结果如何。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 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,
困扰了多时,请大神指点!

TOP

回复 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,
鄙人理解的对吗?
请指点!谢谢!

TOP

回复 15# Batcher



1
感谢大神!


2
非常有帮助!

TOP

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 11# qixiaobin0715



1
感谢大神!


2
很好用啊!不错!


3
http://bbs.bathome.net/thread-4450-1-1.html
大神,有空时,请对这个ReadLine.Bat里的语句,逐句分解一下吧!

TOP

回复 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里的语句,逐句分解一下吧!

TOP

回复 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=*只会显示带有分隔符的整行,与没分隔前的一样。


求教大神!

TOP

回复 6# smatenchen
这些问题论坛里都有教程,慢慢学习即可。多个指定行,比如第5、20、101行:
  1. @echo off
  2. for /f "tokens=1* delims=:" %%a in ('findstr /n .* 1.txt^|findstr /b "5: 20: 101:"') do (
  3.     echo,%%b
  4. )
  5. pause
复制代码

TOP

返回列表