Board logo

标题: [文本处理] 批处理如何读取txt前30个文字,重命名为文档标题? [打印本页]

作者: 029shouji.com    时间: 2020-1-4 21:28     标题: 批处理如何读取txt前30个文字,重命名为文档标题?

请问老师,如何用bat把同一文件夹下的所有txt文本,提取前30个文字,自动重命名为对应txt文件的标题。

刚才找到了一段代码,可以重命名,但是截取的文字太长,不知道怎么才能截取前30个非空文字呢?

请吧代码完整贴出来,我是新手谢谢了!!!
  1. @echo off
  2. for %%a in (*.txt) do (
  3.    setlocal enabledelayedexpansion
  4.    (for /F "usebackq delims=" %%b in ("%%a") do (
  5.       if defined b (echo.%%b) else set "a=%%b"
  6.       set b==
  7.    ))>$
  8.    ren $ "!a!.txt"
  9.    del /q /f "%%a"
  10.    Endlocal
  11. )
复制代码

作者: Batcher    时间: 2020-1-4 21:49

回复 1# 029shouji.com


第8行改成这样可以吗:
ren $ "!a:~0,30!.txt"
作者: 029shouji.com    时间: 2020-1-4 22:09

回复 2# Batcher


    不行哦,返回是$空值,求解
作者: /zhqsystem/zhq    时间: 2020-1-5 05:03

回复 1# 029shouji.com
  1. SetLocal EnableDelayedExpansion
  2. for /f "delims=" %%i in ('dir/a-d/s/b ".\*.txt"')do (
  3. call:循环调用 "%%~fi"
  4. if not defined Error (
  5.   >".\文本处理.temp" echo,!Data!&&rem //实体导出
  6.   copy ".\文本处理.temp"+"%%~fi" ".\文本处理.temp"&&rem //实体导出
  7.   del/q "%%~fi"&&rem //实体导出
  8.   ren ".\文本处理.temp" "%%~nxi"&&rem //实体导出
  9. )else (
  10.   echo,%%~fi
  11.   echo,返回错误码:该文本是空的
  12.   pause
  13. )
  14. )
  15. pause
  16. goto:eof
  17. :循环调用
  18. rem //循环调用加速运行,如果不够数值自动追加下一行
  19. set "临时变量="&&set "Data="&&set "Error="
  20. for /f "delims=" %%j in ('type "%~f1"')do (
  21.   set "临时变量=!临时变量!%%j"
  22.   if /i not "!临时变量:~29,1!"=="" (rem //此行not 控制是否加入下一行填充,如果相加行字符超限会出现未知错误
  23.    set "Data=!临时变量:~0,30!"&&goto:eof
  24.   )
  25. )
  26. set "Error=%~f1"
  27. goto:eof
复制代码

作者: zaqmlp    时间: 2020-1-5 10:35

  1. <# :
  2. cls
  3. @echo off
  4. mode con lines=3000
  5. set info=互助互利,支付宝扫码头像,感谢赞助
  6. rem 有问题,可加QQ956535081及时沟通
  7. title %info%
  8. set "rootpath=%~dp0"
  9. if "%rootpath:~-1%" equ "\" (set "rootpath=%rootpath:~,-1%")
  10. cd /d "%rootpath%"
  11. powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::Default))) -Args '%rootpath%'"
  12. echo;%info%
  13. pause
  14. exit
  15. #>
  16. $folder=$args[0];
  17. $len=30;
  18. $files=@(dir -liter $folder|?{('.txt' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
  19. for($i=0;$i -lt $files.length;$i++){
  20.     $text=[IO.File]::ReadAllText($files[$i].FullName, [Text.Encoding]::Default);
  21.     $s='';$n=0;$m=1;
  22.     for($j=0;$j -lt $text.length;$j++){
  23.         if($text[$j] -match '[^\s\\\/:\*\?"\<\>\|]'){
  24.             $s+=$text[$j];
  25.             $n++;
  26.             if($n -eq $len){break;};
  27.         };
  28.     };
  29.     if($s -ne ''){
  30.         $newname=$s+$files[$i].Extension;
  31.         $newfile=$files[$i].Directory.FullName+'\'+$newname;
  32.         while(test-path -liter $newfile){
  33.             $newname=$s+'_'+$m.toString()+$files[$i].Extension;
  34.             $newfile=$files[$i].Directory.FullName+'\'+$newname;
  35.             $m++;
  36.         };
  37.         write-host $files[$i].FullName -ForegroundColor yellow;
  38.         write-host '-->';
  39.         write-host $newname -ForegroundColor green;
  40.         write-host '';
  41.     };
  42. };
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2