标题: [其他] 求助批处理如何将FindStr的结果输出给Set 呢? [打印本页]
作者: smatenchen 时间: 2022-11-12 00:24 标题: 求助批处理如何将FindStr的结果输出给Set 呢?
本帖最后由 smatenchen 于 2022-11-13 10:16 编辑
求助,如何将FindStr的结果输出给Set 呢?
1,
如何将,- Echo 12345 | FindStr /B /I 123
复制代码
的结果输出给 Set aaa= 呢?
2,
当然,可以借助For /F 命令把结果输出,类似 Set aaa=%%a。
3,
请问大神,有无更简便的方法呢?
类如,- Set aaa=<(Echo 12345 | FindStr /B /I 123)
复制代码
,这样的命令,有吗?
我试过了,行不通,结果是找不到文件。
4,
请大神帮忙!
非常感谢!
作者: smatenchen 时间: 2022-11-12 00:28
回复 1# qixiaobin0715 hfxiang idwma BAT221110
1,
请大神帮忙!
非常感谢!
作者: 77七 时间: 2022-11-12 08:38
http://www.bathome.net/thread-51954-1-1.html
参考此贴六楼,不知道对你有没有帮助
作者: qixiaobin0715 时间: 2022-11-12 09:09
本帖最后由 qixiaobin0715 于 2022-11-12 09:11 编辑
不要突发奇想了,这条路行不通。多条命令是通过管道(|)或者组合命令(&、&&、||等)来进行连接的,你这样不伦不类的,会造成程序在逻辑上的混乱。再说你举的例子也是有问题的,这么明显直接:
set aa=12345
不就行了。这个够简单吧
作者: 77七 时间: 2022-11-12 10:58
回复 3# 77七
或者参考6楼该成这样?- @echo off
- Echo 12345 | FindStr 123 && set "a=yes" || set "a=no"
- echo %a%
- pause
复制代码
作者: smatenchen 时间: 2022-11-12 18:23
回复 3# 77七
作者: smatenchen 时间: 2022-11-12 18:29
回复 5# 77七
1,
非常感谢!
2,
我要的是Set aaa=12345,或者是Set aaa=%%a。
set "a=yes",set "a=no"
这个,不是我想要的。
3,
感谢大神的帮忙!
作者: smatenchen 时间: 2022-11-12 19:21
回复 4# qixiaobin0715 terse BAT221110 hfxiang idwma
1,
非常感谢!
2,
这个问题,其实与删除1.txt里[222]段落里各行的问题,是相连的问题。
Echo 12345,其中12345是未知的,也就是,它相当于是For里的%%a,
所以,你笑出声的set aaa=12345,是不存在的,因为完全不知道它具体会是什么。
更具体一点,它代表的是1.txt里的各行,只知道1.txt里有的行具有某些特征,
比如,它是段落名行,如[222],[???]等。
有的行具有这样的特征,第一个字符是[,比如段落名行,就具有这样的特征。
因为只知道有的行具有这样的特征,其它信息未知。
设为未知,是想让它具有通用性,而不想让它只能在特殊条件下使用。
所以,我想把1.txt里的各行通过 | 给FindStr去过滤,其结果要输出出来。
现在,问题就卡在如何把FindStr过滤后的结果输出出来。
当然,我早说过,可以借助For /F 命令把结果输出,类似 Set aaa=%%a。
FindStr过滤后的结果,我也想到了1个输出办法。
但目前我知道的输出办法,很少,太有限了,我不满意。
所以,再发帖,来求助各位大神了。
3,
请大神们出手帮忙!
非常感谢!
作者: 77七 时间: 2022-11-12 23:08
"所以,我想把1.txt里的各行通过 | 给FindStr去过滤,其结果要输出出来。
现在,问题就卡在如何把FindStr过滤后的结果输出出来。"
这放在1楼说不好吗...1楼描述都不清晰,大家怎么帮助你...看似1234点,实则大家都不知道你在说什么...
输出到文本里呢?- (findstr 123 "1.txt")>>out.txt
复制代码
(发帖建议参考有偿求助区的格式发帖
需求描述:
(1)系统环境(XP/Win7/Win10/Win11,中文版/英文版,专业版/家庭版/精简版,等)
(2)想要实现的功能的具体描述
(3)测试数据及期待结果
(4)其它补充信息
)
作者: smatenchen 时间: 2022-11-13 00:52
本帖最后由 smatenchen 于 2022-11-13 10:14 编辑
回复 9# 77七 qixiaobin0715 terse BAT221110 hfxiang idwma
- (findstr 123 "1.txt")>>out.txt
复制代码
1,
非常感谢!
2,
这样的输出方式,我也想到了。
3,
我设定的场景是这样的,- For /F %%a In (1.txt) Do Echo %%a| FindStr 123
复制代码
把1.txt里的每一行交给FindStr去过滤出具有123字符的那些行,
再把过滤得到的行输出出来。
过滤到x1行含有123字符,就对x1行采取a1处理方法。
过滤到x2行没有123字符,就对x2行采取a2处理方法。
这其中,就还有判断的步骤,类似If命令用法。
我的想法,大致如此,但我不知道如何用 | 把这些命令连接出来。
4,
另外,
用批处理命令,如何改变1.txt的编码格式,从ansi改为utf-8呢?
5,
请大神们帮忙!
非常感谢!
作者: 77七 时间: 2022-11-13 02:26
回复 10# smatenchen
这样不知道对不对- @echo off
- For /F %%a In (1.txt) Do (
- Echo %%a| FindStr 123 && ( echo 正在处理含123的:%%a ) || ( echo 正在处理不含123的:%%a )
- )
- pause
复制代码
作者: smatenchen 时间: 2022-11-13 09:13
本帖最后由 smatenchen 于 2022-11-13 10:15 编辑
回复 11# 77七 qixiaobin0715 terse BAT221110 hfxiang idwma
- @echo off
- For /F %%a In (1.txt) Do (
- Echo %%a| FindStr 123 && ( echo 正在处理含123的:%%a ) || ( echo 正在处理不含123的:%%a )
- )
- pause
复制代码
1,
非常感谢!
2,
我的想法是,到Echo %%a| FindStr 123这一步时,把结果导出来,比如,
把它设为某个变量,以后随时都可以调用它。只是Echo %%a,是不够的。
还有,就是如何让它起判断语句的作用,用FindStr过滤后给出1个判断结果,
再据此,连接1个命令对它做处理。类似,for里的do,if后接的命令。
3,
我的想法,很奇怪,但会非常有用。
例如,删除1.txt里某段落里各行的想法,我参考了大神们的解法后,
再对代码调整,修改后,已写出了批处理命令,现在已可以实用了。
4,
请大神们帮忙!
非常感谢!
作者: 77七 时间: 2022-11-13 11:33
本帖最后由 77七 于 2022-11-13 11:42 编辑
- @echo off
- For /F %%a In (1.txt) Do (
- Echo %%a| FindStr 123 && ( set "h=%%a" ) || ( set "k=%%a" )
- )
- rem h为包含 k为不包含
- pause
复制代码
自己加一个不就行了...- @echo off
- setlocal enabledelayedexpansion
- For /F %%a In (1.txt) Do (
- Echo %%a| FindStr 123 && ( set "h=%%a" & call :al ) || ( set "k=%%a" & call :a2 )
- )
-
- pause
-
- :al
- echo al方法正在处理含123:!h!
- exit /b
-
- :a2
- echo a2方法正在处理不含123:!k!
- exit /b
复制代码
作者: 77七 时间: 2022-11-13 11:56
本帖最后由 77七 于 2022-11-13 12:01 编辑
"比如,
把它设为某个变量,以后随时都可以调用它。"
"随时"不知道如何理解...手动处理吗...
"还有,就是如何让它起判断语句的作用,用FindStr过滤后给出1个判断结果,
再据此,连接1个命令对它做处理。类似,for里的do,if后接的命令。"
你得具体举例,不要只描述,要提供测试数据,及期待效果。不要说的太笼统。
你重新编辑1楼吧,说详细点,找大神帮你,一次性说清楚问题。
(发帖建议参考有偿求助区的格式发帖
需求描述:
(1)系统环境(XP/Win7/Win10/Win11,中文版/英文版,专业版/家庭版/精简版,等)
(2)想要实现的功能的具体描述
(3)测试数据及期待结果
(4)其它补充信息
)
作者: smatenchen 时间: 2022-11-13 15:15
本帖最后由 smatenchen 于 2022-11-13 17:08 编辑
回复 13# 77七 qixiaobin0715 terse BAT221110 hfxiang idwma
1,
非常感谢!
2,
你的代码的确有用。感谢!
没想到,会这么简单。
你的提示,很有用,帮忙很大。
3,
其中,& call :al可以换成& goto :al吗?
4,
感谢大神们帮忙!
作者: smatenchen 时间: 2022-11-13 15:24
回复 14# 77七
1,
非常感谢!
2,
你的看法很好!我也想如此!
感谢!
作者: BAT221110 时间: 2022-11-13 15:29
先输出到文件,然后再
作者: smatenchen 时间: 2022-11-13 17:04
回复 17# BAT221110
1,
非常感谢!
2,
的确是,
不过这会多出1个临时文件XXX.TXT,这就不够完美了。
作者: qixiaobin0715 时间: 2022-11-16 12:19
又是findstr,又是管道,又是组合命令,恐怕效率会成问题吧。
还不如用几个判断语句就ok了,虽然感觉也不是很理想,应当能凑合使用吧:- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in (1.txt) do (
- set str=%%i
- if "!str:~,1!"=="[" (
- if "%%i"=="[222]" (
- set n=true
- echo,%%i
- ) else (
- set n=
- )
- )
- if not defined n echo,%%i
- )
- pause
复制代码
代码未经测试。
作者: smatenchen 时间: 2022-11-16 15:18
本帖最后由 smatenchen 于 2022-11-16 15:20 编辑
回复 19# qixiaobin0715 77七 terse BAT221110 hfxiang idwma
1,
非常感谢!
2,
删除1.txt里某段落里各行的问题,我已经弄好了,现已在使用它了。
3,
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in (1.txt) do (
- set str=%%i
- if "!str:~,1!"=="[" (
- if "%%i"=="[222]" (
- set n=true
- echo,%%i
- ) else (
- set n=
- )
- )
- if not defined n echo,%%i
- )
- pause
复制代码
你的代码有效,可以解题,就是if套if,再接else,句子有点长。
我也是用了3个if句,但省去了else,句子稍短了一点。
解法大同小异。
3,
感谢大神们帮忙!
非常感谢!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |