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

回复 29# WBATW
你所谓的新功能实现起来应当不难,只需要预先设置几个有关变量,然后读取文本内容时加以判断即可。“本目录”是3个字符,本来就不会被排除。

TOP

回复 29# WBATW
应用上面链接帖子中第2个代码,保留文本中字符为“@)”“25”的行及空行。代码保存为ANSI编码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a _@)=1,_25=1
  4. for /f "delims=" %%i in ('dir /s /b /a-d *.txt') do (
  5.     (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%%i"') do (
  6.         if "!_%%b!"=="1" (
  7.             echo,%%b
  8.         ) else if "%%b"=="" (
  9.             echo,
  10.         ) else (
  11.             set str=%%b
  12.             if not "!str:~2!"=="" echo,%%b
  13.         )
  14.     ))>temp.log
  15.     move /y "temp.log" "%%i"
  16. )
  17. pause
复制代码
代码未经测试,请自行测试,有问题再讨论。

TOP

回复 32# qixiaobin0715

恭喜恭喜,这个思路很好,测试基本成功!
辛苦了,qixiaobin0715 !
    测试过程发现:
    代码设置字符“@)”为中文时,测试文件中有英文“@)”和中文“@)”字符,中文“@)”可以成功获取(英文的“@)”获取不到);
    代码设置字符“@)”为英文时,此时,英文字符获取不到、中文的也获取不到。如何修改代码来解决这个难题呢,另外,回车换行的空行保留了而有空格的空行(Tab空行)会被去除掉,可否挽留呢!还要费专家心思了,谢谢!

TOP

本帖最后由 qixiaobin0715 于 2022-10-28 11:45 编辑

你还是没把问题说清楚,最好能将 要保留的少于3个字符的所有特例列个清单(要真实),便于帮助你的人测试用。
1.你可以把清单存入文本文件,发到网盘上;
2.还可以把清单直接发到帖子上,不要“..”  “.”  “..”这种,也不要这种:
..
.
..
需要别人给你的代码那样:
  1. ..
  2. .
  3. ..
复制代码
3.也可以采用最直接的办法,对32楼代码进行修改:
a)去掉第3行的预设变量;
b)修改判断语句,穷尽你所要保留的各种可能(使用多个else if这种形式):
  1. if ... (
  2. ...
  3. ) else if...(
  4. ...
  5. ) else if...(
  6. ...
  7. ) else (
  8. ...
  9. )
复制代码

TOP

本帖最后由 WBATW 于 2022-11-1 14:24 编辑

回复 34# qixiaobin0715
哦~
好的,谢谢!
    也许是我描述过细反而不利于理解。
其实就是英文半角状态的“@)”字符、“)”【不包括引号】括号字符获取不到。最好保留所有的空行。【顺便说明:中文字符状态下效果非常棒】。
    这是我用32楼代码的测试文件:1.txt,请批处理专家qixiaobin0715 试测,谢谢!
------------------------------------
我的测试字符为英文:
25
@)
)
第4行空格空行
最好是能够保留原文件原有的空行。
(32楼代码中的变量需要修改或者增加一个_)=1)
-----------------------------------

TOP

回复 35# WBATW
难道我在34楼还没说清楚?
如果自己要修改代码,请看第3点;
如果想要我帮你修改代码,请再仔细看看第1、2点。

TOP

本帖最后由 qixiaobin0715 于 2022-11-1 15:12 编辑

回复 35# WBATW
根据你的描述,我帮你列一下要保留的清单,你看看是不是这样,共10种情况:
  1. 25
  2.   
  3. @)
  4. @)
  5. )
复制代码

TOP

回复 37# qixiaobin0715
非常感谢你列出的清单详细,中英文都包括了,完全正确。不知道代码有难度没有。

TOP

回复 38# WBATW
  1. @echo off
  2. set var="25" "" " " "  " " " " " "@)" ")" "@)" ")"
  3. for %%i in (%var%) do set _%%i=true
  4. for /f "delims=" %%i in ('dir /s /b /a-d *.txt') do (
  5.     (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%%i"') do (
  6.         if defined _"%%b" (
  7.             echo,%%b
  8.         ) else (
  9.             set str=%%b
  10.             setlocal enabledelayedexpansion
  11.             if not "!str:~2!"=="" echo,%%b
  12.             endlocal
  13.         )
  14.     ))>temp.log
  15.     move /y "temp.log" "%%i"
  16. )
  17. pause
复制代码
bat文件保存为ANSI编码,请自行测试。

TOP

回复 39# qixiaobin0715
感谢你的回复!
    感谢专家,智慧无量,笔下代码新颖,成功运行。也许在代码程序家的眼里是一小酌,但却彰显了批处理之家成员的品味,真诚赞贺!
谢谢!

TOP

返回列表