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

[文本处理] 批处理如何删除每行最后一个指定字符之前的内容/提取每行最后一个指定字符之后的内容

[复制链接]
发表于 2015-1-30 12:01:35 | 显示全部楼层
像这样把第一层循环屏蔽掉也可正常输出结果,弄不懂了。

  1. @echo off & setlocal enabledelayedexpansion
  2. pushd %tmp%

  3. set "启始行=:样本"
  4. for /f "tokens=1 delims=:" %%i in ('findstr /n /r ^!启始行! %~s0') do (set /a "nTag=%%i")&if defined nTag (># more +!nTag! %~s0) else goto :end

  5. set Lf=^


  6. REM for /f %%a in ('copy /z "%~0" nul') do
  7. for %%b in ("!Lf!") do (
  8.   (for /f "delims=" %%c in (#) do (
  9.   set "s=%%c"
  10.   echo,原字符串 : !s!
  11.   set "s=!s:/=/%%a%%~b处理后值 : !"
  12.   echo,处理后值 : !s!
  13.   ))>$
  14. )
  15. findstr "[^/]$" $
  16. del /f $ #

  17. :end
  18. popd
  19. pause & goto :EOF


  20. :样本
  21. http://www.bathome.net/post.php?action=newthread&fid=5
  22. http://www.bathome.net/c/3553908420
复制代码
发表于 2015-1-30 13:05:02 | 显示全部楼层
回复 15# amwfjhh


    昂,难道 findstr 版本不同?还是我记错了?
发表于 2015-1-30 18:01:45 | 显示全部楼层
回复 11# amwfjhh


    嗯,最外一层 for /f %%a in ('copy /z "%~0" nul') do 是多余的。

echo,!s! 已经在字串后面加上了回车换行,不加这一层循环,findstr "[^/]$" 也可以匹配到结果
发表于 2015-1-30 18:20:13 | 显示全部楼层
回复 18# apang


    噢,是这个理,看明白了
发表于 2015-1-30 19:01:14 | 显示全部楼层
本帖最后由 apang 于 2015-1-31 13:20 编辑

回复 16# amwfjhh


    看来我的思维定势很严重,总想到回车换行不应该分开,呵呵。

这样的话,findstr "$" $ > b.txt,匹配包含有回车的行

修改如下:
  1. @echo off
  2. if "%~1" NEQ "" (
  3.         setlocal enabledelayedexpansion
  4.         set Lf=^


  5.         for %%a in ("!Lf!") do (
  6.                 endlocal
  7.                 for /f "delims=" %%b in (a.txt) do (
  8.                         set "s=%%b"
  9.                         setlocal enabledelayedexpansion
  10.                         set "s=!s:/=%%~a!"
  11.                         echo,!s!
  12.                         endlocal
  13.                 )
  14.         )
  15. ) else "%~0" :|findstr $ & pause
复制代码
 楼主| 发表于 2015-1-31 10:03:43 | 显示全部楼层
本帖最后由 lyfwcn 于 2015-1-31 10:07 编辑

回复 13# CrLf

你这第二个又简单(其它的换个符号我就不知该变哪了)又能用又快,不过显示在黑屏上,按键复制它就关了,如何直接改文本啊。或者把c.txt变化后的放入d.txt啊。
  1.     @echo off
  2.     for /f "delims=" %%a in (c.txt) do (
  3.             set str=%%a
  4.             setlocal enabledelayedexpansion
  5.             set str=set "str=!str:$="^&set "str=!"
  6.             call :getstr
  7.             echo !str!
  8.             endlocal
  9.     )
  10.     pause

  11.     :getstr
  12.     %str%
  13.     exit /b
复制代码
发表于 2015-1-31 13:47:17 | 显示全部楼层
回复 21# lyfwcn


    亲,加一个重定向你都不会啊?

能用的话,给CrLf加分呗,不要这么吝啬。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 00:10 , Processed in 0.027822 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表