标题: [文件操作] 批处理如何将txt文本的文件名添加/插入到文本中每一行的行首/开头? [打印本页]
作者: mydreamspace 时间: 2016-6-27 15:13 标题: 批处理如何将txt文本的文件名添加/插入到文本中每一行的行首/开头?
本帖最后由 pcl_test 于 2016-7-10 23:48 编辑
操作系统win10;
手上有多个txt文件,内部数据比较多,需要将txt文件名加到各txt内每行行首,添加进去的文件名与原行的正文用空格或逗号隔开。
作者: GNU 时间: 2016-6-27 15:45
- @echo off
- for %%i in (*.txt) do (
- sed -i "s/^/%%i /" "%%i"
- )
复制代码
作者: mydreamspace 时间: 2016-6-27 15:59
回复 2# GNU
报错啊。。。
'sed' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'sed' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
作者: mydreamspace 时间: 2016-6-27 16:02
回复 2# GNU
我的是windows系统
作者: mydreamspace 时间: 2016-6-27 16:07
本帖最后由 mydreamspace 于 2016-6-28 14:37 编辑
将txt的文件名(不含后缀)添加到txt内每行行首,并加一个空格或者逗号隔开。
目前用的处理太慢
@echo off
dir .\*.txt /b/a-d>names.def
for /f "delims=" %%a in (names.def) do (
for /f "usebackq delims=" %%b in ("%%a") do (
set "var=%%b"
setlocal enabledelayedexpansion
echo %%~na %%b
endlocal
)>>#
move # "%%a"
)
pause
作者: GNU 时间: 2016-6-27 16:09
回复 3# mydreamspace
下载地址:
http://bbs.bathome.net/s/tool/index.html?key=sed
作者: GNU 时间: 2016-6-27 16:12
echo %%~na %%b %%~na
改成
echo %%~na %%b
这样就不会往行尾也添加了文件名
作者: mydreamspace 时间: 2016-6-27 16:13
本帖最后由 pcl_test 于 2016-6-27 22:47 编辑
回复 5# GNU
这个是要自己扩展吗?有没有windows自身就可以实现的啊?
我现在用的这个处理起来有点慢。。
作者: mydreamspace 时间: 2016-6-27 16:14
回复 2# GNU
嗯嗯,是的
主要是有点慢,处理的文件多啊
作者: codegay 时间: 2016-6-27 16:28
本质是同一个问题。想同问题不要一贴多发。
以及提问前搜索。
作者: mydreamspace 时间: 2016-6-27 16:57
回复 4# codegay
好的,
搜索过了,
本质是一个问题,这个我注意下。
作者: shootman2 时间: 2016-6-27 21:17
可以把
setlocal enabledelayedexpansion
endlocal
放在外面,这样避免每次打开又关闭
@echo off&setlocal enabledelayedexpansion
dir .\*.txt /b/a-d>names.def
for /f "delims=" %%a in (names.def) do (
for /f "usebackq delims=" %%b in ("%%a") do (
set "var=%%b"
echo %%~na %%b
)>>#
move # "%%a"
)
endlocal
pause
作者: mydreamspace 时间: 2016-6-28 13:22
回复 12# shootman2
还是有点慢,不过这样还是有效果的,速度提高了一倍,原先差不多3-4秒一个文件,现在1-2秒左右了
作者: jrx401 时间: 2016-6-28 23:37
本帖最后由 pcl_test 于 2016-6-29 02:14 编辑
我这个菜鸟写的。
不过文件名会变成 [原文件名]_1.txt
[bat码]:- echo AddFileNametoCol1
- echo ---------------------------------
- :: Step1, Catch all txt file and save to namelist.txt
- if exist namelist.txt del namelist.txt
- if exist namelist.lst del namelist.lst
- for %%i in (*.txt) do echo %%i>>namelist.lst
- cd.>namelist.txt
- for /f "tokens=1,2 delims=." %%J in (namelist.lst) do echo %%J >>namelist.txt
- del namelist.lst
-
- :: Step2, add file name to collumn 1
- setlocal enabledelayedexpansion
- for /f %%C in (namelist.txt) do (
- set n=0
- for /f "delims=" %%a in (%%C.txt) do (
- echo %%C,%%a>>%%C_1.txt
- )
- )
- del namelist.txt
- pause
复制代码
作者: WHY 时间: 2016-6-29 18:49
- gawk "{s=substr(FILENAME,1,length(FILENAME)-4); print s,$0>s\".Log\"}" *.txt
复制代码
作者: pcl_test 时间: 2016-6-29 22:04
- //&cls&dir /a-d/b *.txt|cscript -nologo -e:jscript "%~f0"&pause&exit
- var fso = new ActiveXObject('Scripting.Filesystemobject');
- var txtfiles = WSH.StdIn.ReadAll().split(/\r\n/);
- for(var i = 0; i<txtfiles.length; i++){
- var filename = fso.GetFile(txtfiles[i]).Name.replace(/\.[^\.]+$/, '');
- var f = fso.OpenTextFile(txtfiles[i], 1);
- var txt = f.ReadAll().replace(/(^|\r?\n)(?!(\r?\n|$))/g, '$&'+filename+',');
- f.Close();
- var f = fso.OpenTextFile(txtfiles[i], 2);
- f.Write(txt);
- f.Close();
- }
- WSH.echo('Done');
复制代码
作者: mydreamspace 时间: 2016-6-30 13:01
回复 15# WHY
一闪而过,然后好像什么都没发生
作者: mydreamspace 时间: 2016-6-30 13:04
回复 14# jrx401
可以,不过比原先的没快多少。。
作者: mydreamspace 时间: 2016-6-30 13:07
回复 16# pcl_test
这速度好恐怖。。拿一百多个txt试了下,刚点开就转换好了。。。
作者: jrx401 时间: 2016-7-1 22:38
回复 12# shootman2
果然很简洁。
如下两个没有见过, 可否给解释一下呢?
>>#
move # "%%a"
作者: jrx401 时间: 2016-7-1 22:41
回复 16# pcl_test
看不懂 Code。
想要看懂,我要参考什么样的资料呢?
作者: WHY 时间: 2016-7-2 01:19
回复 20# jrx401
>> 是重定向符,#是文件名,move在这里是把#文件重命名
这样可能会好一点:- @echo off
- for %%a in (*.txt) do (
- (for /f "usebackq delims=" %%b in ("%%a") do (
- echo %%~na %%b
- ))>"%%~na.Log"
- )
复制代码
作者: WHY 时间: 2016-7-2 01:23
- @if (0)==(0) echo off
- dir /b *.txt | cscript //nologo //e:jscript "%~f0"
- pause & exit
- @end
-
- var getContent = function(strFile){
- var strName = fso.GetBaseName(strFile);
- var objFile = fso.OpenTextFile(strFile, 1);
- var s = objFile.ReadAll().replace(/[^\r\n]+/g, strName + ' $&');
- objFile.Close();
- fso.OpenTextFile(strName + '.Log', 2, true).Write(s)
- }
-
- var fso = new ActiveXObject('Scripting.FileSystemObject');
- while(!WSH.StdIn.AtEndOfStream){getContent(WSH.StdIn.ReadLine());}
复制代码
作者: qixiaobin0715 时间: 2018-7-30 00:03
回复 16# pcl_test
若想把文件名放到行尾,并将所有文件合并为一个新文件,如何改动?
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |