[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 qixiaobin0715 于 2023-11-6 17:08 编辑
  1. @echo off
  2. chcp 65001>nul
  3. (for /f "tokens=1*" %%i in (test.txt) do (
  4.     if "%%j"=="" (
  5.         echo,%%i
  6.     ) else (
  7.         for /f "tokens=1,2 delims=.第章" %%I in ("%%i") do (
  8.             if "%%I"=="%%J" (
  9.                 echo,第%%I章 %%j
  10.                 echo,
  11.             ) else (
  12.                 setlocal enabledelayed
  13.                 set m=%%I
  14.                 set /a n=m
  15.                 echo,%%i %%j
  16.                 if "%%I"=="!n!" echo,
  17.                 endlocal
  18.             )
  19.         )
  20.     )
  21. ))>New-test.txt
  22. pause
复制代码
1

评分人数

TOP

本帖最后由 qixiaobin0715 于 2023-11-10 09:57 编辑

回复 3# kokoxx
加上空行即可,已修改,不过不是太严谨。

TOP

本帖最后由 qixiaobin0715 于 2023-11-11 09:24 编辑

这样简单判断一下,也能应付绝大多数情况:
  1. @echo off
  2. chcp 65001>nul
  3. (for /f "tokens=1*" %%i in (test.txt) do (
  4.     if "%%j"=="" (
  5.         echo,%%i
  6.     ) else (
  7.         setlocal enabledelayedexpansion
  8.         set "str=%%i"
  9.         if "!str:~-1!"=="章" (
  10.             echo,!str:*.=! %%j
  11.             echo,
  12.         ) else (
  13.             echo,%%i %%j
  14.         )
  15.         endlocal
  16.     )
  17. ))>New-test.txt
  18. pause
复制代码
回头又看了看上面代码,感觉setlocal enabledelayedexpansion与endlocal纯属鸡肋,这里没特殊情况不需要频繁开关变量延迟功能,即使存在特殊字符,也应当将7-8行代码互换位置。可这样修改代码:
    直接将setlocal enabledelayedexpansion放在第2-3行之间即可,删除for循环中的setlocal enabledelayedexpansion与endlocal。

TOP

返回列表