标题: [文件操作] [已解决]批处理如何搜寻字串? [打印本页]
作者: hp051247767 时间: 2013-12-4 09:55 标题: [已解决]批处理如何搜寻字串?
本帖最后由 hp051247767 于 2013-12-4 13:28 编辑
从tableresult.txt中读取字串当作搜寻字串
tableresult.txt 內容
companly20131115basic_employee_data_grid
companly20131115basic_employee_data_grid_input
companly20131115employee
companly20131115healthinsurance
companly20131115personal_report
companly20131115salary
companly20131115salary_calculation
从string.txt中搜寻有tableresult.txt档案中的字串并抓取搜寻字串以下的行数到PRIMARY KEY(`SID`)为止
且只要抓前面的'XXX'后面的VARCHAR(100)NOT NULL不要
输出成result.txt
tableresult.txt 內容
DROP TABLE IF EXISTS `axtmes_group_info`;
CREATE TABLE `axtmes_group_info` (
`GROUP_INFO_SID` bigint(32) NOT NULL,
`GROUPNAME` varchar(100) DEFAULT NULL,
`DESCR` text,
`TAG` decimal(32,0) DEFAULT NULL,
`USERID` varchar(100) DEFAULT NULL,
`UPDATETIME` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`GROUP_INFO_SID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `COMPANLY20131115EMPLOYEE`;
CREATE TABLE `COMPANLY20131115EMPLOYEE` (
`SID` VARCHAR(100) NOT NULL ,
`C_NAME_V` VARCHAR(100) NULL
,
`INSURANCEAMT_V` VARCHAR(100) NULL
,
`SEX_V` VARCHAR(100) NULL
,
`SALARYAMT_V` VARCHAR(100) NULL
,
PRIMARY KEY (`SID`)
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `COMPANLY20131115SALARY`;
CREATE TABLE `COMPANLY20131115SALARY` (
`SID` VARCHAR(100) NOT NULL ,
`SID_V` VARCHAR(100) NULL
,
`C_NAME_V` VARCHAR(100) NULL
,
`SALARYAMT_V` VARCHAR(100) NULL
,
`AXTMODIFY` VARCHAR(100) NULL
,
PRIMARY KEY (`SID`)
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `COMPANLY20131115HEALTHINSURANCEHistory`;
CREATE TABLE `COMPANLY20131115HEALTHINSURANCEHistory` (
`SID` VARCHAR(100) NOT NULL ,
`SID_V` VARCHAR(100) NULL
,
`C_NAME_V` VARCHAR(100) NULL
,
`INSURANCEAMT_V` VARCHAR(100) NULL
,
`AXTMODIFY` VARCHAR(100) NULL
,
`MODIFYUSER` VARCHAR(100) NULL
,
`ACTION` VARCHAR(100) NULL
,
`UPDATETIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
作者: DAIC 时间: 2013-12-4 11:01
- @echo off
- setlocal enabledelayedexpansion
- set "fileTable=tableresult.txt"
- set "fileString=string.txt"
- set "fileResult=result.txt"
-
- (for /f %%a in (%fileTable%) do (
- call :Get_Begin %%a
- echo ---------- %%a [Line: !lineBegin!] ----------
- if !lineBegin! gtr 0 (
- call :Fetch_Lines !lineBegin!
- )
- ))>%fileResult%
- goto :eof
-
- :Get_Begin
- REM 计算从哪一行开始
- for /f "tokens=1 delims=:" %%i in ('findstr /i /n "CREATE.*TABLE.*%1" %fileString%') do (
- set lineBegin=%%i
- )
- goto :eof
-
- :Fetch_Lines
- REM 获取需要的字符串
- for /f "skip=%1 delims=" %%i in (%fileString%) do (
- set str=%%i
- if "!str:PRIMARY KEY=!" neq "!str!" (
- goto :eof
- ) else (
- if "!str:* `=!" neq "%%i" (
- set str=`!str:* `=!
- )
- if "!str:`=!" neq "!str!" (
- if "!str:~0,1!" equ "`" (
- for /f "tokens=1 delims=`" %%j in ("!str!") do (
- echo %%j
- )
- )
- )
- )
- )
复制代码
作者: hp051247767 时间: 2013-12-4 11:17
回复 2# DAIC
bat会把DROP TABLE IF EXISTS `COMPANLY20131115HEALTHINSURANCEHistory`;也一起输出
作者: DAIC 时间: 2013-12-4 11:27
回复 3# hp051247767
用记事本打开string.txt
文件
另存为
选择ANSI编码
作者: hp051247767 时间: 2013-12-4 11:37
回复 4# DAIC
結果companly20131115basic_employee_data_grid [Line: 751] 751行 实际是这样 CREATE TABLE `COMPANLY20131115BASIC_EMPLOYEE_DATA_GRID_INPUTHistory` (
原本应输出string.txt 的427行 即使改成ANSI编码也一样
---------- companly20131115basic_employee_data_grid [Line: 751] ----------
SID
SEX_V
VETERAN_V
MARRIAGE_V
DEP_NO_V
JOB_V
OBS_V
EMPS_V
EDUCATION_V
SECTION_V
GRADUATION_STAT_V
LABOR_CLASS_V
HEALTH_CLASS_V
MODIFYUSER
ACTION
UPDATETIME
作者: DAIC 时间: 2013-12-4 12:59
回复 5# hp051247767 - @echo off
- setlocal enabledelayedexpansion
- set "fileTable=tableresult.txt"
- set "fileString=string.txt"
- set "fileResult=result.txt"
-
- (for /f %%a in (%fileTable%) do (
- call :Get_Begin %%a
- echo ---------- %%a [Line: !lineBegin!] ----------
- if !lineBegin! gtr 0 (
- call :Fetch_Lines !lineBegin!
- )
- ))>%fileResult%
- goto :eof
-
- :Get_Begin
- REM 计算从哪一行开始
- for /f "tokens=1 delims=:" %%i in ('findstr /i /n "CREATE.*TABLE.*%1`" %fileString%') do (
- set lineBegin=%%i
- )
- goto :eof
-
- :Fetch_Lines
- REM 获取需要的字符串
- for /f "skip=%1 delims=" %%i in (%fileString%) do (
- set str=%%i
- if "!str:PRIMARY KEY=!" neq "!str!" (
- goto :eof
- ) else (
- if "!str:* `=!" neq "%%i" (
- set str=`!str:* `=!
- )
- if "!str:`=!" neq "!str!" (
- if "!str:~0,1!" equ "`" (
- for /f "tokens=1 delims=`" %%j in ("!str!") do (
- echo %%j
- )
- )
- )
- )
- )
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |