如何用提取文本文件内第一行作为该文件文件名【批处理】

我的文件内容都是如下格式:深圳公交车我在深圳生活三年多了,多少有些惆怅,混的不是很好,特别是这个物欲横流的年代,深圳特区更是这样。相比之下人为环境更是糟透了。就拿坐公交车... 我的文件内容都是如下格式:
深圳公交车
我在深圳生活三年多了,多少有些惆怅,混的不是很好,特别是这个物欲横流的年代,深圳特区更是这样。相比之下人为环境更是糟透了。就拿坐公交车来说吧,我上班在福田,住在南山的家乐福附近,经常坐204或603往返福田和南山。
刚来时,我不大习惯这里的公交车...

我想将第一行作为文件名,原文件名是数字的,有上千个文件,我找到一个批处理能截取里面内容作为文件名的,可是不是这里要的第一行,谁帮我改改?
@echo off
for %%a in ("*.txt") do (call:ChangName "%%a")
goto :eof

:ChangName
for /f "usebackq skip=2 delims= " %%h in (%1) do (ren %1 "%%h.txt")
goto:eof
为什么取出的名字是后面某个段落的整段文字啊?是不是因为第一行后面的不是正常的回车换行啊?那要怎么办?

谢谢两位,可是还是有取出后面段落的结果,一部分成功,怎么办? 我发现执行还没完的时候中断执行反而有更多的文件名弄对了,是怎么回事?能不能设定一个文件只能改名一次?
展开
 我来答
zhanghao090726
2009-08-01
知道答主
回答量:5
采纳率:0%
帮助的人:0
展开全部
答复已补充:
你如果确认第一行就是要的标题而不是空行或其它的话,那么应该就样:
@echo off
for %%a in ("*.txt") do (call:ChangName "%%a")
goto :eof

:ChangName
for /f "usebackq delims=" %%h in ("%1") do (ren "%1" "%%h.txt"&goto :eof)
goto:eof

问题有2:1.为什么你要用skip=2跳过头2行呢?
2.for是一个循环,你不停止它,它就会一直的运行下去,虽然理论上不会再对ren产生影响了,但是很耗资源的

特别要注意的是你用了usebackq参数,那么%1就得加上""了,这样FOR才认为它是一个文件,后面的也加上,以免路径有空格时发生错误。

如果你不确定第一行是不是空行的话可以参照一楼的兄弟判断的语句(稍做更改):
for ......(
setlocal enabledelayedexpansion
set "var=%%i"
if defined var (ren "%1" "%%i.txt" & goto :eof)
set var=)

发现问题了,楼主说在中途停止反而正确的多,问题在于第一句
for %%a in (*.txt) do (call:ChangName "%%~a")
当你更改文件名时,for会对更改后的文件再次遍历,所以先导出文件名再做更改的动作吧,第一段更改如下:
@echo off
dir /b *.txt>>%temp%\dirlist.txt
for /f "usebackq delims=" %%a in ("%temp%\dirlist.txt") do (call:ChangName "%%a")
goto :eof
fastslz
2009-07-31 · TA获得超过938个赞
知道小有建树答主
回答量:561
采纳率:100%
帮助的人:911万
展开全部
补充回答,“不正常”的回车换行能处理的,特殊字符无能为力
@echo off
for %%a in (*.txt) do (call:ChangName "%%~a")
pause&exit

:ChangName
>nul set /p var=<"%~1"
ren "%~1" "%var%.txt"
set var=
goto:eof
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式