求提取文本中内容作为标题的批处理
某个文件夹下有几千个文本,需要提取文本中内容的前20个字符作为文件名,如果第一行的字符少于20个字符,能继续读取下行的字符,直到等于20个。并能自动去除不能作为文件名的字...
某个文件夹下有几千个文本,
需要提取文本中内容的前20个字符作为文件名,
如果第一行的字符少于20个字符,能继续读取下行的字符,直到等于20个。
并能自动去除不能作为文件名的字符。以免命名出错。
求高手写个批处理,谢谢! 展开
需要提取文本中内容的前20个字符作为文件名,
如果第一行的字符少于20个字符,能继续读取下行的字符,直到等于20个。
并能自动去除不能作为文件名的字符。以免命名出错。
求高手写个批处理,谢谢! 展开
1个回答
展开全部
试了一下
我感觉你很蛋疼呢,为什么要按照你那种取20个的方法?
直接取有文字的第一行不够20不全不行吗?
批处理对于符号的处理不是很擅长,比如!><\/等,关键的问题是这几个就是不能作为文件名的
对于符号的我没有考虑,还有计算取到第一行有几个字符的时候考虑不了空格,还有几千个文本如果每个文本都很大的话用批处理会非常非常的慢
代码如下
-------------分割线-------------
@Echo Off
Setlocal EnableDelayedExpansion
For /f "Tokens=*" %%b In ('dir/b *.txt') Do (
Set EndNum=20
Set "Name_="
For /f "Tokens=*" %%a In ('Type "%%b"') Do (
If Exist "%%b" (
Set "temp_=%%a"
Call Set "temp_=%%temp_:~,!EndNum!%%"
If !EndNum!==1 (
Set "Name_=!Name_!!temp_!"
if exist "%%b" Ren "%%b" "!Name_!.txt"
)
Call :GetTheEndNum
If !EndNum! LEQ 0 (
Set "Name_=!Name_!!temp_!"
Ren "%%b" "!Name_!.txt"
) Else (
If Defined Name_ (Set "Name_=!Name_!!temp_!") Else (Set "Name_=!temp_!")
)
)
)
)
echo Over
Pause
Goto :eof
:GetTheEndNum
For /l %%i In (!EndNum! -1 1) Do (
If "!temp_:~%%i,1!" NEQ "" (
Set/a EndNum=!EndNum!-%%i-1
Goto :eof
)
)
-------------分割线-------------
以上代码只对批处理当前文件夹内后缀为txt的文件进行重命名操作,请模拟自己实际环境测试后再使用,建议操作前备份
我感觉你很蛋疼呢,为什么要按照你那种取20个的方法?
直接取有文字的第一行不够20不全不行吗?
批处理对于符号的处理不是很擅长,比如!><\/等,关键的问题是这几个就是不能作为文件名的
对于符号的我没有考虑,还有计算取到第一行有几个字符的时候考虑不了空格,还有几千个文本如果每个文本都很大的话用批处理会非常非常的慢
代码如下
-------------分割线-------------
@Echo Off
Setlocal EnableDelayedExpansion
For /f "Tokens=*" %%b In ('dir/b *.txt') Do (
Set EndNum=20
Set "Name_="
For /f "Tokens=*" %%a In ('Type "%%b"') Do (
If Exist "%%b" (
Set "temp_=%%a"
Call Set "temp_=%%temp_:~,!EndNum!%%"
If !EndNum!==1 (
Set "Name_=!Name_!!temp_!"
if exist "%%b" Ren "%%b" "!Name_!.txt"
)
Call :GetTheEndNum
If !EndNum! LEQ 0 (
Set "Name_=!Name_!!temp_!"
Ren "%%b" "!Name_!.txt"
) Else (
If Defined Name_ (Set "Name_=!Name_!!temp_!") Else (Set "Name_=!temp_!")
)
)
)
)
echo Over
Pause
Goto :eof
:GetTheEndNum
For /l %%i In (!EndNum! -1 1) Do (
If "!temp_:~%%i,1!" NEQ "" (
Set/a EndNum=!EndNum!-%%i-1
Goto :eof
)
)
-------------分割线-------------
以上代码只对批处理当前文件夹内后缀为txt的文件进行重命名操作,请模拟自己实际环境测试后再使用,建议操作前备份
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询