[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
我首先想到的思路是:for /f 解析 findstr /o 做减法
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

考虑到所有特殊字符的情况后,2楼说的方法实现起来还真有点麻烦。
先来个代码简单但效率超低的方法
  1. @echo off
  2. set var2=.
  3. for /f "usebackq delims=" %%a in ("%~f0") do (
  4.     set var=%%a
  5.     set var|findstr /o ".*"|findstr /b "14:" >nul && (
  6.         setlocal enabledelayedExpansion
  7.         echo !var!
  8.         endlocal
  9.     )
  10. )
  11. pause&exit/b
  12. :2345678
  13. ^%; <!"
  14. 上面是全角空格
复制代码
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 8楼 的帖子

2楼的方法其实不麻烦,开始没想清楚,变量还是可以保留的
  1. @echo off
  2. for /f "tokens=1* delims=:" %%a in ('findstr /n /o .* "%~f0"') do (
  3.     for /f "delims=:" %%i in ("%%b") do set m=%%i
  4.     set /a x=m-n
  5.     setlocal enabledelayedExpansion
  6.     if !x!==10 echo !var:*:=!
  7.     endlocal
  8.     set /a n=m
  9.     set var=%%b
  10. )
  11. pause&exit/b
  12. ;2345678
  13. ^%; <!"
  14. 上面是全角空格
复制代码
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

晕,findstr /n 写习惯了,%%a根本没用到~~
for /f "delims=" %%a in ('findstr /o .* "%~f0"') do


方法都一样,被netbenton兄抢先了,而且考虑到了最后一行没有回车的情况。
"tokens=*"改成"delims="就兼容所有字符了。
可以用more "%~f0"|findstr /o .*更简洁点,more会在文本内容后面加额外的回车。

[ 本帖最后由 zqz0012005 于 2009-6-10 20:57 编辑 ]
1

评分人数

    • 随风: 点睛之笔 (^_^)PB + 11
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

忘了,最后还要自己加一行,以应付最后一行也是8个字节的情况。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

后面的“echo.”是不必要的,more也是不必要的,直接用type也行,此时不存在最后行问题。

findstr 的正则还真是古怪。下面是javascript的正则:
  1. mshta "javascript:alert( '12345678\r\n一二三四'.match(/^........$/gim) ); alert( '12345678\r\n一二三四'.match(/^....$/gim) );close();"
复制代码
看来 findstr 问题不少。除了以前cn-dos的willsort总结的,前不久又有人发现了一个:http://bbs.verybat.org/thread-18013-1-2.html
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

findstr /x strings filename,等同于 findstr "^strings$" filename,也等同于 findstr /be "strings" filename
这样的写法有最后行问题(最后行没有回车的情况)。

type filename | findstr /x strings
这样写没有上面的问题。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 13、14楼 的帖子

(more "%~f0"&echo.)|findstr /o .*
这样会多出额外的空格。

要再加一行,其实多加一个more就行了:
more "%~f0"|more|findstr /o .*
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

返回列表