如何从一个txt文件中提取一行文字作为文件名?
发布网友
发布时间:2022-09-25 02:27
我来回答
共2个回答
热心网友
时间:2023-09-15 03:32
是用批处理命令来完成这一问题
不是vbs
楼住的意思我知道
我保存的时候也是这样
今天看都这个问题
于是想动手实现一下
说不定以后用的着
想了一下午
才得到方法
提取第一行并不是那么简单
我想用for命令但是失败了
于是采用find命令
/N参数可以显示行号
/V参数可以显示不包含的行
/C参数表示只输出符合条件的行数
有一个技巧是
如果想知道一个文件有多少行的话
可以这样
假设对于文本文件a.txt
type a.txt | find /V /C ""
意思是显示出a.txt来
在其中找出不含有""的行来
并输出行数
那么由于每一行都没有""这个东西
所以显示了所有的行
怎么得到第一行呢
可以通过显示所有的行号
然后在输出中寻找"[1]"
这是第一行的标志
但是也许有的行本来就含有"[1]"
所以我们迭代几次
寻找"[1][1][1][1][1]”那么出错的几率就小得多了
将得到的一若干"[1]"和第一行组成的串保存到一文件
利用for的/F参数 设置"]"为分隔符
取最后一个元素就得到了第一行的本来内容
最后将临时文件删除
好了
代码贴出来:
@echo off
type %1 | find /V /N "" | find /N "[1]" | find /N "[1][1]" | find /N "[1][1][1]" | find /N "[1][1][1][1]">_n_a_m_e_.txt
for /F "delims=] tokens=1,2,3,4,5,*" %%a in (_n_a_m_e_.txt) do @ren %1 %%f%~x1
del _n_a_m_e_.txt
这样就好了
注意只有四行
建议复制到记事本看
保存为re.bat就好了
比如将文件1.txt处理的话
在CMD下输入re 1.txt
那么假设那文件第一行是good的话
那么它将被重命名为good.txt
也许这还不是很方便
我们可能有很多这样的文件放在一目录下
那么可以再引进一个批处理
用它来实现自动调用
@echo off
for %%i in (%~f1\*.txt) do @call re.bat %%~fi
保存为doo.bat那么处理D盘dl目录的命令是
doo D:\dl
这样dl目录下的所有文件得到处理
最后再说几个问题
如果有几个文件的第一行相同
那么有的将得不到处理
因为不能重名
如果文件里本来就有[1][1][1][1][1]
这样的串也会有问题
只有更多的迭代
但是这样的情况很少见
如果你也需要处理子目录下的文件
那么可以结合for /R命令
这里我不考虑了
这里的方法需要两个文件
也可以合成一个
就是用第二个生成第一个
就像处理注册表文件一样
大家自己解决下吧
有人提问的话我再发贴解决
已经在XP系统上测试
本人原创,累死了
热心网友
时间:2023-09-15 03:33
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
WMISQL = "ASSOCIATORS OF {Win32_Directory.Name='" & WScript.Arguments(0) &"'} Where ResultClass = CIM_DataFile"
Set FileList = objWMIService.ExecQuery(WMISQL)
For Each objFile In FileList
strNewName = objFile.Drive & objFile.Path & _
objFile.FileName & "." & objFile.Extension & "." & WScript.Arguments(1)
errResult = objFile.Rename(strNewName)
' Wscript.Echo strNewName
Next
^^^^^^^^^^^^^^^^^^^
把上面的内容粘贴复制到记事本中,保存为AddExt.vbs
然后在命令行方式运行
c:\>AddExt.vbs e:\temp 5
e:\temp:就是您需要修改文件的目录
5:是你的新的扩展名
如果您以前的文件名称为abc.def
执行的结果为:
abc.def.5
热心网友
时间:2023-09-15 03:32
是用批处理命令来完成这一问题
不是vbs
楼住的意思我知道
我保存的时候也是这样
今天看都这个问题
于是想动手实现一下
说不定以后用的着
想了一下午
才得到方法
提取第一行并不是那么简单
我想用for命令但是失败了
于是采用find命令
/N参数可以显示行号
/V参数可以显示不包含的行
/C参数表示只输出符合条件的行数
有一个技巧是
如果想知道一个文件有多少行的话
可以这样
假设对于文本文件a.txt
type a.txt | find /V /C ""
意思是显示出a.txt来
在其中找出不含有""的行来
并输出行数
那么由于每一行都没有""这个东西
所以显示了所有的行
怎么得到第一行呢
可以通过显示所有的行号
然后在输出中寻找"[1]"
这是第一行的标志
但是也许有的行本来就含有"[1]"
所以我们迭代几次
寻找"[1][1][1][1][1]”那么出错的几率就小得多了
将得到的一若干"[1]"和第一行组成的串保存到一文件
利用for的/F参数 设置"]"为分隔符
取最后一个元素就得到了第一行的本来内容
最后将临时文件删除
好了
代码贴出来:
@echo off
type %1 | find /V /N "" | find /N "[1]" | find /N "[1][1]" | find /N "[1][1][1]" | find /N "[1][1][1][1]">_n_a_m_e_.txt
for /F "delims=] tokens=1,2,3,4,5,*" %%a in (_n_a_m_e_.txt) do @ren %1 %%f%~x1
del _n_a_m_e_.txt
这样就好了
注意只有四行
建议复制到记事本看
保存为re.bat就好了
比如将文件1.txt处理的话
在CMD下输入re 1.txt
那么假设那文件第一行是good的话
那么它将被重命名为good.txt
也许这还不是很方便
我们可能有很多这样的文件放在一目录下
那么可以再引进一个批处理
用它来实现自动调用
@echo off
for %%i in (%~f1\*.txt) do @call re.bat %%~fi
保存为doo.bat那么处理D盘dl目录的命令是
doo D:\dl
这样dl目录下的所有文件得到处理
最后再说几个问题
如果有几个文件的第一行相同
那么有的将得不到处理
因为不能重名
如果文件里本来就有[1][1][1][1][1]
这样的串也会有问题
只有更多的迭代
但是这样的情况很少见
如果你也需要处理子目录下的文件
那么可以结合for /R命令
这里我不考虑了
这里的方法需要两个文件
也可以合成一个
就是用第二个生成第一个
就像处理注册表文件一样
大家自己解决下吧
有人提问的话我再发贴解决
已经在XP系统上测试
本人原创,累死了
热心网友
时间:2023-09-15 03:33
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
WMISQL = "ASSOCIATORS OF {Win32_Directory.Name='" & WScript.Arguments(0) &"'} Where ResultClass = CIM_DataFile"
Set FileList = objWMIService.ExecQuery(WMISQL)
For Each objFile In FileList
strNewName = objFile.Drive & objFile.Path & _
objFile.FileName & "." & objFile.Extension & "." & WScript.Arguments(1)
errResult = objFile.Rename(strNewName)
' Wscript.Echo strNewName
Next
^^^^^^^^^^^^^^^^^^^
把上面的内容粘贴复制到记事本中,保存为AddExt.vbs
然后在命令行方式运行
c:\>AddExt.vbs e:\temp 5
e:\temp:就是您需要修改文件的目录
5:是你的新的扩展名
如果您以前的文件名称为abc.def
执行的结果为:
abc.def.5