找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 95851|回复: 23

[文件操作] 批处理如何将txt文本的文件名添加/插入到文本中每一行的行首/开头?

[复制链接]
发表于 2016-6-27 15:13:44 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-7-10 23:48 编辑

操作系统win10;
手上有多个txt文件,内部数据比较多,需要将txt文件名加到各txt内每行行首,添加进去的文件名与原行的正文用空格或逗号隔开。

评分

参与人数 1PB -4 收起 理由
pcl_test -4 发帖前先使用论坛搜索

查看全部评分

发表于 2016-6-27 15:45:24 | 显示全部楼层
  1. @echo off
  2. for %%i in (*.txt) do (
  3.     sed -i "s/^/%%i /" "%%i"
  4. )
复制代码
 楼主| 发表于 2016-6-27 15:59:02 | 显示全部楼层
回复 2# GNU


    报错啊。。。
'sed' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'sed' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
 楼主| 发表于 2016-6-27 16:02:54 | 显示全部楼层
回复 2# GNU


    我的是windows系统
 楼主| 发表于 2016-6-27 16:07:12 | 显示全部楼层
本帖最后由 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

评分

参与人数 1PB -2 收起 理由
pcl_test -2 未按版规发帖

查看全部评分

发表于 2016-6-27 16:09:03 | 显示全部楼层
回复 3# mydreamspace


下载地址:
http://bbs.bathome.net/s/tool/index.html?key=sed
发表于 2016-6-27 16:12:02 | 显示全部楼层
echo %%~na %%b %%~na
改成
echo %%~na %%b
这样就不会往行尾也添加了文件名
 楼主| 发表于 2016-6-27 16:13:00 | 显示全部楼层
本帖最后由 pcl_test 于 2016-6-27 22:47 编辑

回复 5# GNU
这个是要自己扩展吗?有没有windows自身就可以实现的啊?
我现在用的这个处理起来有点慢。。
 楼主| 发表于 2016-6-27 16:14:30 | 显示全部楼层
回复 2# GNU


    嗯嗯,是的
主要是有点慢,处理的文件多啊
发表于 2016-6-27 16:28:28 | 显示全部楼层
本质是同一个问题。想同问题不要一贴多发。
以及提问前搜索。
 楼主| 发表于 2016-6-27 16:57:37 | 显示全部楼层
回复 4# codegay


好的,
搜索过了,
本质是一个问题,这个我注意下。
发表于 2016-6-27 21:17:13 | 显示全部楼层
可以把
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
 楼主| 发表于 2016-6-28 13:22:25 | 显示全部楼层
回复 12# shootman2


    还是有点慢,不过这样还是有效果的,速度提高了一倍,原先差不多3-4秒一个文件,现在1-2秒左右了
发表于 2016-6-28 23:37:23 | 显示全部楼层
本帖最后由 pcl_test 于 2016-6-29 02:14 编辑

我这个菜鸟写的。
不过文件名会变成  [原文件名]_1.txt

[bat码]:

  1. echo AddFileNametoCol1
  2. echo ---------------------------------
  3. :: Step1, Catch all txt file and save to namelist.txt
  4. if exist namelist.txt del namelist.txt
  5. if exist namelist.lst del namelist.lst
  6. for %%i in (*.txt) do echo %%i>>namelist.lst
  7. cd.>namelist.txt
  8. for /f "tokens=1,2  delims=." %%J in (namelist.lst) do echo %%J >>namelist.txt
  9. del namelist.lst

  10. :: Step2, add file name to collumn 1
  11. setlocal enabledelayedexpansion
  12. for /f %%C in (namelist.txt) do (
  13.         set n=0
  14.         for /f "delims=" %%a in (%%C.txt) do (
  15.             echo %%C,%%a>>%%C_1.txt
  16. )
  17. )
  18. del namelist.txt
  19. pause
复制代码
发表于 2016-6-29 18:49:01 | 显示全部楼层
  1. gawk "{s=substr(FILENAME,1,length(FILENAME)-4); print s,$0>s".Log"}" *.txt
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 04:45 , Processed in 0.022592 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表