[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
原帖由 terse 于 2009-1-31 13:23 发表
这样呢?@echo off
if not exist Not12\ md Not12
for /f "delims=" %%i in ('dir /b /a-d "*.txt"') do set "str="&call:lp "%%i"
pause&exit
:lp
for /f "tokens=1-3* delims=‖" %%a in ('findstr /iv "" %1 ...

我剛才用您代碼測試

發現符合十二個分隔符的文本,也會被分類在Not12文件夾裡

我上傳一個文本供您測試

麻煩您

TOP

这样呢?
  1. @echo off
  2. if not exist Not12\ md Not12
  3. for /f "delims=" %%i in ('dir /b /a-d "*.txt"') do set "str="&call:lp "%%i"
  4. pause&exit
  5. :lp
  6. for /f "tokens=1-3* delims=‖" %%a in ('findstr /iv "<<錯誤>>" %1') do (
  7.    if not defined str (set str=%%i&>>"new_Tmp_%~1" echo %%a‖%%b‖%%c‖%%d)else (
  8.    set "str=%%d"
  9.    setlocal enabledelayedexpansion
  10.    for /l %%i in (1 1 9) do (
  11.    set "str=!str:*‖=!"
  12. )
  13.    if "!str!"=="" (
  14.    endlocal
  15.    >>"new_Tmp_%~1" echo %%a‖%%b‖?‖%%d
  16. ) else (
  17. move %1 "Not12\%~1"& del "new_Tmp_%~1" 2>nul&exit/b
  18. )))
复制代码

TOP

原帖由 terse 于 2009-1-29 16:29 发表
这样可以不@echo off
if not exist Not12\ md Not12
for /f "delims=" %%i in ('dir /b /a-d "*.txt"') do call:lp "%%i"
pause&exit
:lp
for /f "tokens=1-3* delims=‖" %%a in ('findstr /iv "" %1') do (
...

您的代碼是可以運行的

但是我需要忽略第一行,對其他行進行處理

我加入skip=1 好像也不行,會直接刪除第一行

可以麻煩您再修改嗎?

還有您上次在"非常批處理"網站給我的代碼
非常好用

再次感謝您!

TOP

原帖由 wxcute 于 2009-1-29 14:26 发表
问题一、样本没有含 “错误” 字样的行
  二、样本中没有非 12 个分隔符的行

  三、样本首行与其他行没什么区别

以下代码不能处理一行中引号数为单数的情况。@echo off
if not exist Not12\ md Not12
f ...

抱歉,过完年回来电脑被孩子玩坏,慢点回覆请多包含

前辈我使用您的代码后如下图,不能运行

另外我上传了两个错误的文本给您测试

第一个是含有错误的文本

第二个是含有少于十二个的文本

而因为这是网站的资料文本,第一行保留下来,是因为那是文章的标题,第二行以后就不需要文章标题,所以改用?字符禁止读取

麻烦您再帮忙

再次感谢您辛劳

TOP

这样可以不
  1. @echo off
  2. if not exist Not12\ md Not12
  3. for /f "delims=" %%i in ('dir /b /a-d "*.txt"') do call:lp "%%i"
  4. pause&exit
  5. :lp
  6. for /f "tokens=1-3* delims=‖" %%a in ('findstr /iv "<<錯誤>>" %1') do (
  7.    set "str=%%d"
  8.    setlocal enabledelayedexpansion
  9.    for /l %%i in (1 1 9) do (
  10.    set "str=!str:*‖=!"
  11. )
  12.    if "!str!"=="" (
  13.    endlocal
  14.    >>"new_Tmp_%~1" echo %%a‖%%b‖?‖%%d
  15. ) else (
  16. move %1 "Not12\%~1"& del "new_Tmp_%~1" 2>nul&exit/b
  17. ))
复制代码

TOP

问题一、样本没有含 “错误” 字样的行
  二、样本中没有非 12 个分隔符的行

  三、样本首行与其他行没什么区别

以下代码不能处理一行中引号数为单数的情况。
  1. @echo off
  2. if not exist Not12\ md Not12
  3. for /f "delims=" %%X in ('dir/b *.txt') do (
  4.  set flag=
  5.  call :wordErr "%%X"
  6.  for /f "usebackq skip=1 delims=" %%i in ("Tmp_%%X") do (
  7.   call :judge12 "%%i"
  8.  )
  9.  if defined flag move "Tmp_%%X" Not12
  10.  if not defined flag for /f "usebackq tokens=1-3* delims=‖" %%a in ("Tmp_%%X") do (
  11.   if exist "new_%%X" (
  12.    echo %%a‖%%b‖?‖%%d>>"new_%%X"
  13.   ) else echo %%a‖%%b‖%%c‖%%d>"new_%%X"
  14.  )
  15. )
  16. pause
  17. :judge12
  18.  set n=
  19.  set contain=%1
  20. :lp
  21.  set contain=%contain:*‖="%
  22.  set/a n+=1
  23.  if %n% lss 12 (
  24.   if %contain%=="" set flag=1
  25.   goto :lp
  26.  )
  27.  if not %contain%=="" set flag=1
  28.  goto :eof
  29. :wordErr
  30.  cd.>"Tmp_%~1"
  31.  for /f "delims= eol=" %%i in ('findstr /v "\<\<錯誤>>" %1') do (
  32.   echo+%%i>>"Tmp_%~1"
  33.  )
复制代码

TOP

原帖由 terse 于 2009-1-29 01:47 发表
@echo off
if not exist Not12\ md Not12
for /f "delims=" %%i in ('dir/b /a-d *.txt') do call :lp "%%i"
exit
:lp
for /f "tokens=1-12* delims=∥" %%a in ('findstr /iv "" %1') do (
if "%%l"=="" (mov ...

前輩
沒想到在這裡也看到您

真是熱心的人

在這跟你拜個年~~祝 健康順心

我測試您的代碼後

not12文件夾內的都是符合12個∥分隔符的文本

並且沒有進行?字符的取代

是不是處理方式搞反了呢?

謝謝

[ 本帖最后由 leo1984 于 2009-1-29 03:57 编辑 ]

TOP

原帖由 随风 于 2009-1-29 01:30 发表
未测试。。
建议给出样本文件
仍有几个疑问
如你5楼所说。
只要文本內其中有一行,不符合十二個∥分隔符,就將該文本移動到別的文件夾
对于此句中的 “不符合十二個∥分隔符” 我有多个理解。
1、∥∥∥∥∥∥ ...

我測試過您的代碼

不太合理@@

我需求的是:

1:先進行?字符先取代

2:接著要完全符合12個∥分隔符,多或少都不能

謝謝你的答覆^^

以下幾個範本供您測試



[ 本帖最后由 leo1984 于 2009-1-29 03:52 编辑 ]

TOP

  1. @echo off
  2. if not exist Not12\ md Not12
  3. for /f "delims=" %%i in ('dir/b /a-d *.txt') do call :lp "%%i"
  4. exit
  5. :lp
  6. for /f "tokens=1-12* delims=∥" %%a in ('findstr /iv "<<錯誤>>" %1') do (
  7. if "%%l"=="" (move %1 "Not12\%~1"& del "Not12\new_Tmp_%~1" 2>nul&exit/b)else (
  8. >>"new_Tmp_%~1" echo %%a∥%%b∥?∥%%d∥%%e∥%%f∥%%g∥%%h∥%%i∥%%j∥%%k∥%%l∥
  9. ))
复制代码

TOP

未测试。。
建议给出样本文件
仍有几个疑问
如你5楼所说。
只要文本內其中有一行,不符合十二個∥分隔符,就將該文本移動到別的文件夾
对于此句中的 “不符合十二個∥分隔符” 我有多个理解。
1、∥∥∥∥∥∥∥∥∥∥∥∥abcd∥ 这算有12个吗?
2、∥1∥2∥3∥4∥5∥∥∥∥6∥7∥8∥9∥10∥11∥ 这算有12个吗?
以下代码对 “符合十二個∥分隔符” 的定义是:
1、连续的∥算作一个
2、每行首尾的∥被忽略。
3、不足12个∥的就將該文本移動到別的文件夾,但多于12个的则不会。
代码未测试,并会改写源文件,测试前勿必作备份。。。切记!!!
:
  1. @echo off
  2. md sss
  3. for /f "delims=" %%A in ('dir/b *.txt') do (
  4.    cd.>xx.txt
  5.    set var=&set flag=a
  6.    for /f "tokens=1-3* delims=∥" %%a in ('findstr /iv "錯誤" "%%A"') do (
  7.       >>xx.txt echo %%a∥%%b∥?∥%%d
  8.       for /f "tokens=13 delims=∥" %%B in ("%%a∥%%b∥?∥%%d") do set "flag="
  9.       if defined flag set var=a
  10.    )
  11.    if defined var move "%%A" "sss"&del/q xx.txt
  12.    if exist xx.txt move "xx.txt" "%%A"
  13. )
  14. pause
复制代码
技术问题请到论坛发帖求助!

TOP

原帖由 wxcute 于 2009-1-27 11:32 发表
使用前请备份,以免数据丢失。还有可以先用部分数据测试。
其中 “Tmp_原名” 为中间文件,即去掉含 “错误” 字符串的行,因为无法整合处理,所以改用临时文件。
“new_原名” 为最终生成文件。@echo off
echo 使 ...

抱歉

過年期間回老家一直沒能上來答覆

我試用了您的代碼後

發現沒有生成new文件

也就是?字符沒有進行替換

請問是為什麼呢?

感謝!

TOP

使用前请备份,以免数据丢失。还有可以先用部分数据测试。
其中 “Tmp_原名” 为中间文件,即去掉含 “错误” 字符串的行,因为无法整合处理,所以改用临时文件。
“new_原名” 为最终生成文件。
  1. @echo off
  2. echo 使用前请先备份好数据……
  3. echo 备份好后按任意键开始。
  4. pause>nul
  5. if not exist Not12\ md Not12
  6. for /f "delims=" %%X in ('dir/b *.txt') do (
  7.  set flag=
  8.  call :wordErr "%%X"
  9.  call :judge12 "Tmp_%%X"
  10.  if not defined flag for /f "usebackq skip=1 tokens=1-12* delims=∥" %%a in ("Tmp_%%X") do (
  11.   if not exist "new_%%X" call :firstL "%%X"
  12.   echo %%a∥%%b∥?∥%%d∥%%e∥%%f∥%%g∥%%h∥%%i∥%%j∥%%k∥%%l>>"new_%%X"
  13.  )
  14. )
  15. pause
  16. :firstL
  17.  set/p first=<%1
  18.  echo %first%>"new_%~1"
  19.  goto :eof
  20. :judge12
  21.  for /f "usebackq skip=1 tokens=1-12* delims=∥" %%a in (%1) do (
  22.   if "%%l"=="" set flag=1
  23.   if not "%%m"=="" set flag=1
  24.  )
  25.  if defined flag move "%~1" Not12
  26.  goto :eof
  27. :wordErr
  28.  cd.>"Tmp_%~1"
  29.  for /f "delims= eol=" %%i in ('findstr /v "<<錯誤>>" %1') do (
  30.   echo+%%i>>"Tmp_%~1"
  31.  )
复制代码

TOP

另外請教wxcute版主

您給我的代碼,只要處理文本內含有 "!"  "?"  ":"  "<"  字符,就會跳過不處理

請問要如何忽略過這些字符正常處理呢?

謝謝

TOP

原帖由 defanive 于 2009-1-25 23:26 发表
用findstr配合。。。
用sed等第三方工具方便吧,用for做太麻烦了。。。

不太瞭解您所講的

請問該怎麼使用呢?

小弟這方面還沒學習過

因為網站的資料要處理,經過友人推薦來此討教

希望給新手多包含指點

TOP

用findstr配合。。。
用sed等第三方工具方便吧,用for做太麻烦了。。。

TOP

返回列表