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

[文件操作] [已解决]批处理如何搜寻字串?

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

评分人数

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

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "fileTable=tableresult.txt"
  4. set "fileString=string.txt"
  5. set "fileResult=result.txt"
  6. (for /f %%a in (%fileTable%) do (
  7.     call :Get_Begin %%a
  8.     echo ---------- %%a [Line: !lineBegin!] ----------
  9.     if !lineBegin! gtr 0 (
  10.         call :Fetch_Lines !lineBegin!
  11.     )
  12. ))>%fileResult%
  13. goto :eof
  14. :Get_Begin
  15. REM 计算从哪一行开始
  16. for /f "tokens=1 delims=:" %%i in ('findstr /i /n "CREATE.*TABLE.*%1" %fileString%') do (
  17.     set lineBegin=%%i
  18. )
  19. goto :eof
  20. :Fetch_Lines
  21. REM 获取需要的字符串
  22. for /f "skip=%1 delims=" %%i in (%fileString%) do (
  23.     set str=%%i
  24.     if "!str:PRIMARY KEY=!" neq "!str!" (
  25.         goto :eof
  26.     ) else (
  27.         if "!str:* `=!" neq "%%i" (
  28.             set str=`!str:* `=!
  29.         )
  30.         if "!str:`=!" neq "!str!" (
  31.             if "!str:~0,1!" equ "`" (
  32.                 for /f "tokens=1 delims=`" %%j in ("!str!") do (
  33.                     echo %%j
  34.                 )
  35.             )
  36.         )
  37.     )
  38. )
复制代码

TOP

回复 2# DAIC
bat会把DROP TABLE IF EXISTS `COMPANLY20131115HEALTHINSURANCEHistory`;也一起输出

TOP

回复 3# hp051247767


用记事本打开string.txt
文件
另存为
选择ANSI编码

TOP

回复 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

TOP

回复 5# hp051247767
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "fileTable=tableresult.txt"
  4. set "fileString=string.txt"
  5. set "fileResult=result.txt"
  6. (for /f %%a in (%fileTable%) do (
  7.     call :Get_Begin %%a
  8.     echo ---------- %%a [Line: !lineBegin!] ----------
  9.     if !lineBegin! gtr 0 (
  10.         call :Fetch_Lines !lineBegin!
  11.     )
  12. ))>%fileResult%
  13. goto :eof
  14. :Get_Begin
  15. REM 计算从哪一行开始
  16. for /f "tokens=1 delims=:" %%i in ('findstr /i /n "CREATE.*TABLE.*%1`" %fileString%') do (
  17.     set lineBegin=%%i
  18. )
  19. goto :eof
  20. :Fetch_Lines
  21. REM 获取需要的字符串
  22. for /f "skip=%1 delims=" %%i in (%fileString%) do (
  23.     set str=%%i
  24.     if "!str:PRIMARY KEY=!" neq "!str!" (
  25.         goto :eof
  26.     ) else (
  27.         if "!str:* `=!" neq "%%i" (
  28.             set str=`!str:* `=!
  29.         )
  30.         if "!str:`=!" neq "!str!" (
  31.             if "!str:~0,1!" equ "`" (
  32.                 for /f "tokens=1 delims=`" %%j in ("!str!") do (
  33.                     echo %%j
  34.                 )
  35.             )
  36.         )
  37.     )
  38. )
复制代码
1

评分人数

TOP

返回列表