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

[文本处理] [已解決]BAT如何抓取指定字串以下的行数

本帖最后由 hp051247767 于 2013-12-4 08:51 编辑

Companly20131115.sql 內容如下
DROP TABLE IF EXISTS `axt_event_log`;

CREATE TABLE `axt_event_log` (
`EVENT` varchar(2048) NOT NULL,
`USERIP` varchar(100) NOT NULL,
`USERID` varchar(100) NOT NULL,
`UPDATETIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `COMPANLY20131115BASIC_EMPLOYEE_DATA_GRID`;
CREATE TABLE  `COMPANLY20131115BASIC_EMPLOYEE_DATA_GRID` (
  `SID` VARCHAR(100) NOT NULL  ,
`EMP_NO_V` VARCHAR(100) NULL
,
`C_NAME_V` VARCHAR(100) NULL
,
`SEX_V` VARCHAR(100) NULL
,
`ID_NO_V` VARCHAR(100) NULL
,
`BIRTHDAY_V` VARCHAR(100) NULL
,
`TEL_NO_V` VARCHAR(100) NULL
,
`POST_NO_V` VARCHAR(100) NULL
,
`ADDRESS_V` VARCHAR(100) NULL
,
`ADDRESS1_V` VARCHAR(100) NULL
,
`VETERAN_V` VARCHAR(100) NULL
,
`MARRIAGE_V` VARCHAR(100) NULL
,
`ECP_V` VARCHAR(100) NULL
,
`ECP_TEL_V` VARCHAR(100) NULL
,
`HEIGHT_V` VARCHAR(100) NULL
,
`WEIGHT_V` VARCHAR(100) NULL
,
`BLOOD_V` VARCHAR(100) NULL
,
`NATIONALITY_V` VARCHAR(100) NULL
,
`DEP_NO_V` VARCHAR(100) NULL
,
`JOB_V` VARCHAR(100) NULL
,
`OBT_V` VARCHAR(100) NULL
,
`LBT_V` VARCHAR(100) NULL
,
`OBS_V` VARCHAR(100) NULL
,
`EMPS_V` VARCHAR(100) NULL
,
`EDUCATION_V` VARCHAR(100) NULL
,
`SCHOOL_V` VARCHAR(100) NULL
,
`SECTION_V` VARCHAR(100) NULL
,
`ENTRY_DATE_V` VARCHAR(100) NULL
,
`GRADUATION_DATE_V` VARCHAR(100) NULL
,
`GRADUATION_STAT_V` VARCHAR(100) NULL
,
`SALARY_V` VARCHAR(100) NULL
,
`LABOR_CLASS_V` VARCHAR(100) NULL
,
`HEALTH_CLASS_V` VARCHAR(100) NULL
,
`TRANFER_DATE_V` VARCHAR(100) NULL
,
`ROLLOUT_DATE_V` VARCHAR(100) NULL
,
`FAMILY_NUM_V` VARCHAR(100) NULL
,
`RIA_V` VARCHAR(100) NULL
,
`RCR_V` VARCHAR(100) NULL
,
`RPR_V` VARCHAR(100) NULL
,
`CREATE_TIME_V` VARCHAR(100) NULL
,
`CREATE_USER_V` VARCHAR(100) NULL
,
`MODIFY_TIME_V` VARCHAR(100) NULL
,
`MODIFY_USER_V` VARCHAR(100) NULL
,
`AXTMODIFY` VARCHAR(100) NULL
,
PRIMARY KEY (`SID`)
)ENGINE=MyISAM DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `sysadminmenucaption`;
CREATE TABLE `sysadminmenucaption` (
`SID` varchar(100) NOT NULL,
`SUB_MENU` varchar(100) DEFAULT NULL,
`MENU_ITEM` varchar(100) DEFAULT NULL,
`LANGUAGE_TYPE` varchar(100) DEFAULT NULL,
`LANGUAGE` varchar(100) DEFAULT NULL,
`MENU_TREE_SID` varchar(100) NOT NULL,
PRIMARY KEY (`SID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

想抓取  CREATE TABLE  `COMPANLY20131115BASIC_EMPLOYEE_DATA_GRID`    以下的行数到     )ENGINE=MyISAM DEFAULT CHARSET=utf8;    为止
且只要抓前面的`XXX`後面的 VARCHAR(100) NOT NULL 不要
CREATE TABLE  `COMPANLY20131115BASIC_EMPLOYEE_DATA_GRID` 是不固定的只知道前面的CREATE TABLE  `COMPANLY20131115
并输出成result.txt     请问该如何做?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

感谢各位~~谢谢

TOP

回复 3# hp051247767
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "fileSrc=Companly20131115.sql"
  4. set "fileDst=result.txt"
  5. REM 计算从哪一行开始
  6. for /f "tokens=1 delims=:" %%i in ('findstr /n "CREATE.*TABLE.*COMPANLY20131115" %fileSrc%') do (
  7.     set lineBegin=%%i
  8. )
  9. REM 计算到哪一行结束
  10. for /f "tokens=1 delims=:" %%i in ('findstr /n /c:"ENGINE=MyISAM DEFAULT CHARSET=utf8" %fileSrc%') do (
  11.     set lineEnd=%%i
  12. )
  13. set /a n=lineEnd-lineBegin
  14. REM 获取需要的内容
  15. call :Fetch_Lines %lineBegin% >%fileDst%
  16. goto :eof
  17. :Fetch_Lines
  18. for /f "skip=%1 delims=" %%i in (%fileSrc%) do (
  19.     set /a m+=1
  20.     if !m! lss !n! (
  21.         set str=%%i
  22.         if "!str:* `=!" neq "%%i" (
  23.             set str=`!str:* `=!
  24.         )
  25.         if "!str:`=!" neq "!str!" (
  26.             if "!str:~0,1!" equ "`" (
  27.                 for /f "tokens=1 delims=`" %%j in ("!str!") do (
  28.                     echo %%j
  29.                 )
  30.             )
  31.         )
  32.     )
  33. )
复制代码
1

评分人数

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (Companly20131115.sql) do (
  3.   if "%%i" equ "CREATE TABLE  `COMPANLY20131115BASIC_EMPLOYEE_DATA_GRID` (" set flag=1
  4.   if "%%i" equ ")ENGINE=MyISAM DEFAULT CHARSET=utf8;" set "flag="
  5.   if defined flag (set str=%%i&set str=!str:*`=!
  6.   if "!str:`=!" neq "%%i" (
  7.     for /f "tokens=1 delims=`" %%j in ("!str!") do echo,%%j
  8.     )
  9.   )
  10. )>>result.txt
  11. pause
复制代码
1

评分人数

TOP

回复 2# DAIC
只要抓前面的`XXX`後面的  VARCHAR(100) NOT NULL 不要
如 `SID` VARCHAR(100) NOT NULL  ,     只要 `SID`

TOP

且只要抓`XXX`後面的 VARCHAR(100) NOT NULL  ,  不要

不要什么?

TOP

返回列表