Board logo

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

作者: freesoft00    时间: 2015-11-8 01:19     标题: call到相应的标签findstr过滤批处理本身显示内容

本帖最后由 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应该如何呢?
作者: freesoft00    时间: 2015-11-8 01:26

本帖最后由 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

楼主是做流氓软件的吧。
作者: freesoft00    时间: 2015-11-8 09:21

回复 3# 依山居

仁兄何以见得?
我那个del只是示例。
作者: 依山居    时间: 2015-11-8 10:38

  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
复制代码

作者: terse    时间: 2015-11-8 11:16

call 过去的时候 先传递%0 过去呢 比如 call :www %0
然后 type %1
作者: /zhqsystem/zhq    时间: 2015-11-8 14:25

本帖最后由 /zhqsystem/zhq 于 2015-11-8 14:34 编辑

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

感谢各位的提点。
其实我的 代码是这样的,第一个call后面跟了一个参数,

上层代码call :www %%b

:www
call :bbb

:bbb
tyep %0

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


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

恕在下愚笨,如果能有实例代码更容易理解,纯理论还是摸不着头脑。
作者: WHY    时间: 2015-11-8 15:50

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

作者: /zhqsystem/zhq    时间: 2015-11-8 17:41

回复 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
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2