找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27019|回复: 9

[文本处理] call到相应的标签findstr过滤批处理本身显示内容

[复制链接]
发表于 2015-11-8 01:19:43 | 显示全部楼层 |阅读模式
本帖最后由 freesoft00 于 2015-11-8 16:01 编辑
  1. 上层代码call :www %%b


  2. :www
  3. if exist %srt% call :bbb
  4. goto :eof

  5. :bbb
  6. for /f %%i in ('type  %0^|findstr /i "^c:.*\.exe$"') do (
  7. del  %%i
  8. )
  9. goto :eof

  10. c:\windows\explorer.exe
  11. c:\windows\notepad.exe
复制代码
不知道为什么不对。在:bbb标签这里无法执行下去。我把echo off更改为echo on ,查看'type  %0在代码执行中是'type :bbb,是不是因为这里所以错误了。
正确的应用call应该如何呢?
 楼主| 发表于 2015-11-8 01:26:07 | 显示全部楼层
本帖最后由 freesoft00 于 2015-11-8 09:23 编辑

for /f %%i in ('type  %%0^|findstr /i "^c:.*\.exe$"') do (
两个百分号也不对
但是比如这个文件是33.txt
for /f %%i in ('type  33.ttxt^|findstr /i "^c:.*\.exe$"') do (
这样就可以。但是名称就必须得固定的了。
发表于 2015-11-8 06:40:44 | 显示全部楼层
楼主是做流氓软件的吧。
 楼主| 发表于 2015-11-8 09:21:03 | 显示全部楼层
回复 3# 依山居

仁兄何以见得?
我那个del只是示例。
发表于 2015-11-8 10:38:39 | 显示全部楼层
  1. @echo off
  2. ::CODER BY yishanju POWERD BY iBAT


  3. findstr /i ".*\.exe$" %0


  4. :g
  5. goto ex

  6. c:\windows\explorer.exe
  7. c:\windows\notepad.exe

  8. :ex
  9. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
freesoft00 + 1 感谢!

查看全部评分

发表于 2015-11-8 11:16:02 | 显示全部楼层
call 过去的时候 先传递%0 过去呢 比如 call :www %0
然后 type %1

评分

参与人数 1技术 +1 收起 理由
freesoft00 + 1 感谢!

查看全部评分

发表于 2015-11-8 14:25:19 | 显示全部楼层
本帖最后由 /zhqsystem/zhq 于 2015-11-8 14:34 编辑

用type "%~f0"判断当值为某标签时设定一个开始的变量值,当不等于这个值时连续执行每行,判断想要结束的行当需要结束时设定一个变量或清空结束的变量值,判断有变量值时[和没有变量]执行就完成了,这是执行思路自己多研究下就会发现其中的奥妙之处了
 楼主| 发表于 2015-11-8 15:16:23 | 显示全部楼层
感谢各位的提点。
其实我的 代码是这样的,第一个call后面跟了一个参数,

上层代码call :www %%b

:www
call :bbb

:bbb
tyep %0

因为call命令并不怎么熟悉,想这样用,可以省去很多命令,实现代码复用。


用type "%~f0"判断当值为某标签时设定一个开始的变量值,当不等于这个值时连续执行每行,判断想要结束的行当需要结束时设定一个变量或清空结束的变量值,判断有变量值时[和没有变量]执行就完成了,这是执行思路自己多研究下就会发现其中的奥妙之处了

恕在下愚笨,如果能有实例代码更容易理解,纯理论还是摸不着头脑。
发表于 2015-11-8 15:50:54 | 显示全部楼层
  1. call :www

  2. :www
  3. echo %0
复制代码
这里的 %0 是指标签本身(:www)
可以这样:
  1. call :www "%~0"

  2. :www
  3. echo %~1
复制代码

评分

参与人数 1技术 +1 收起 理由
freesoft00 + 1 感谢!

查看全部评分

发表于 2015-11-8 17:41:23 | 显示全部楼层
回复 8# freesoft00
研究下这段代码的含义吧,不用call直接运行指定批处理内的文本,第二个for可以去除建议保留(去除注意括号和变量值替换),注:此段代码思路出自群内某位大神非我的代码
  1. @echo off
  2. for /f "delims=" %%i in ('type "%~f0"') do (
  3. for /f "delims=" %%j in ("%%i") do (
  4. if /i "%%i"=="::bathome.net" set "start_start=yes"&set "over="
  5. if /i "%%i"=="::bathome.net_over" set "over=no"&set "start_start="
  6. if /i not "%%i"=="::bathome.net" if defined start_start if not defined over echo=%%j
  7. )
  8. )
  9. pause
  10. ::bathome.net
  11. 123457
  12. 890
  13. 6754
  14. jkhfd
  15. ::bathome.net_over
复制代码

评分

参与人数 1技术 +1 收起 理由
freesoft00 + 1 感谢!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 10:37 , Processed in 0.020451 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表