标题: [文本处理] 批处理如何读取txt前30个文字,重命名为文档标题? [打印本页]
作者: 029shouji.com 时间: 2020-1-4 21:28 标题: 批处理如何读取txt前30个文字,重命名为文档标题?
请问老师,如何用bat把同一文件夹下的所有txt文本,提取前30个文字,自动重命名为对应txt文件的标题。
刚才找到了一段代码,可以重命名,但是截取的文字太长,不知道怎么才能截取前30个非空文字呢?
请吧代码完整贴出来,我是新手谢谢了!!!- @echo off
- for %%a in (*.txt) do (
- setlocal enabledelayedexpansion
- (for /F "usebackq delims=" %%b in ("%%a") do (
- if defined b (echo.%%b) else set "a=%%b"
- set b==
- ))>$
- ren $ "!a!.txt"
- del /q /f "%%a"
- Endlocal
- )
复制代码
作者: 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
- SetLocal EnableDelayedExpansion
- for /f "delims=" %%i in ('dir/a-d/s/b ".\*.txt"')do (
- call:循环调用 "%%~fi"
- if not defined Error (
- >".\文本处理.temp" echo,!Data!&&rem //实体导出
- copy ".\文本处理.temp"+"%%~fi" ".\文本处理.temp"&&rem //实体导出
- del/q "%%~fi"&&rem //实体导出
- ren ".\文本处理.temp" "%%~nxi"&&rem //实体导出
- )else (
- echo,%%~fi
- echo,返回错误码:该文本是空的
- pause
- )
- )
- pause
- goto:eof
- :循环调用
- rem //循环调用加速运行,如果不够数值自动追加下一行
- set "临时变量="&&set "Data="&&set "Error="
- for /f "delims=" %%j in ('type "%~f1"')do (
- set "临时变量=!临时变量!%%j"
- if /i not "!临时变量:~29,1!"=="" (rem //此行not 控制是否加入下一行填充,如果相加行字符超限会出现未知错误
- set "Data=!临时变量:~0,30!"&&goto:eof
- )
- )
- set "Error=%~f1"
- goto:eof
复制代码
作者: zaqmlp 时间: 2020-1-5 10:35
- <# :
- cls
- @echo off
- mode con lines=3000
- set info=互助互利,支付宝扫码头像,感谢赞助
- rem 有问题,可加QQ956535081及时沟通
- title %info%
- set "rootpath=%~dp0"
- if "%rootpath:~-1%" equ "\" (set "rootpath=%rootpath:~,-1%")
- cd /d "%rootpath%"
- powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::Default))) -Args '%rootpath%'"
- echo;%info%
- pause
- exit
- #>
-
- $folder=$args[0];
- $len=30;
-
- $files=@(dir -liter $folder|?{('.txt' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
- for($i=0;$i -lt $files.length;$i++){
- $text=[IO.File]::ReadAllText($files[$i].FullName, [Text.Encoding]::Default);
- $s='';$n=0;$m=1;
- for($j=0;$j -lt $text.length;$j++){
- if($text[$j] -match '[^\s\\\/:\*\?"\<\>\|]'){
- $s+=$text[$j];
- $n++;
- if($n -eq $len){break;};
- };
- };
- if($s -ne ''){
- $newname=$s+$files[$i].Extension;
- $newfile=$files[$i].Directory.FullName+'\'+$newname;
- while(test-path -liter $newfile){
- $newname=$s+'_'+$m.toString()+$files[$i].Extension;
- $newfile=$files[$i].Directory.FullName+'\'+$newname;
- $m++;
- };
- write-host $files[$i].FullName -ForegroundColor yellow;
- write-host '-->';
- write-host $newname -ForegroundColor green;
- write-host '';
- };
- };
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |