|
|
发表于 2009-2-1 20:15:38
|
显示全部楼层
条件总结如下:
一、先删除文本中包含 <<删除>> 字串的行;
二、处理一行为 12 个 ‖ 作为分隔符的文本,只要有一行不是 12 个分隔符,就放到一个单独的目录中;
其中不考虑第一行,而且分隔符连续出现时分开算个数
三、将第三列替换为问号。
其中头两列不为空
一行中的感叹号不能太多,多了就要将 set txtL=%%i%%j%%k%%l%%m 加长。- @echo off
- if not exist Not12\ md Not12
- for /f "delims=" %%X in ('dir/b *.txt') do (
- set flag=
- call :wordErr "%%X"
- for /f "usebackq skip=1 tokens=1-4* delims=!" %%i in ("Tmp_%%X") do (
- set txtL=%%i%%j%%k%%l%%m
- setlocal enableDelayedExpansion
- set txtL=!txtL:"=!
- call :judge12 "!txtL!"
- setlocal disableDelayedExpansion
- )
- if defined flag move "Tmp_%%X" Not12
- if not defined flag for /f "usebackq delims=" %%I in ("Tmp_%%X") do (
- for /f "usebackq tokens=1-3* delims=‖" %%a in ('%%I') do (
- if exist "new_%%X" (
- echo %%a‖%%b‖?‖%%d>>"new_%%X"
- ) else echo %%I>"new_%%X"
- )
- )
- )
- pause
- goto :eof
- :judge12
- set n=
- set contain=%1
- :lp
- set contain=%contain:*‖="%
- set/a n+=1
- if %n% lss 12 (
- if %contain%=="" set flag=1
- goto :lp
- )
- if not %contain%=="" set flag=1
- goto :eof
- :wordErr
- cd.>"Tmp_%~1"
- for /f "delims= eol=" %%i in ('findstr /v "<<删除>>" %1') do (
- echo+%%i>>"Tmp_%~1"
- )
复制代码
[ 本帖最后由 wxcute 于 2009-2-1 20:26 编辑 ] |
|