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

[文本处理] 批处理重命名文件名后,第一个文件名出现重复文本,如何解决?

[复制链接]
发表于 2023-6-11 23:37:18 | 显示全部楼层 |阅读模式
本帖最后由 布布丁 于 2023-6-11 23:39 编辑

手头有10个txt文件,每个文件只有2行内容。文件原名称为第一行文本的内容,现在需要重命名为:第二行文本的内容+原名称。举例说明:
文件原名称为:
001.泥坑.txt
003.春节.txt
005.最好的朋友.txt
007.捉迷藏.txt
009.猪妈妈在工作.txt
011.猪爸爸的眼镜不见了.txt
013.打嗝.txt
015.秘密.txt
017.野餐.txt
019.青蛙,虫子和蝴蝶.txt
----------------------------
期望重命名后的文件名称为:
002.双胞胎熊猫_001.泥坑.txt
004.恐龙先生弄丢了_003.春节.txt
006.鹦鹉波莉_005.最好的朋友.txt
008.乔治第一天上幼儿园_007.捉迷藏.txt
010.中间的小猪_009.猪妈妈在工作.txt
012.花园种菜_011.猪爸爸的眼镜不见了.txt
014.自行车_013.打嗝.txt
016.放风筝_015.秘密.txt
018.乐器_017.野餐.txt
020.装扮游戏_019.青蛙,虫子和蝴蝶.txt
-------------------------------------------
按照下面的脚本:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%a in (*.txt) do set "txt=%%a" & call :aa
  4. pause
  5. :aa
  6. for /f "usebackq skip=1 delims=*" %%b in ("!txt!") do (
  7. set "a=%%a" & set "b=%%b"
  8. ren "!a!" "!b!_!a!"
  9. goto :eof
  10. )
复制代码
执行后,文件名称为:
002.双胞胎熊猫_002.双胞胎熊猫_001.泥坑.txt
004.恐龙先生弄丢了_003.春节.txt
006.鹦鹉波莉_005.最好的朋友.txt
008.乔治第一天上幼儿园_007.捉迷藏.txt
010.中间的小猪_009.猪妈妈在工作.txt
012.花园种菜_011.猪爸爸的眼镜不见了.txt
014.自行车_013.打嗝.txt
016.放风筝_015.秘密.txt
018.乐器_017.野餐.txt
020.装扮游戏_019.青蛙,虫子和蝴蝶.txt
--------------------------------------------------
即第一个文件名中,"002.双胞胎熊猫_002.双胞胎熊猫"出现了重复(实际第一个文件第二行文本内容为:002.双胞胎熊猫)。
请帮忙看看为什么第一个文件名中会出现重复?该如何修正脚本呢?
发表于 2023-6-11 23:53:16 | 显示全部楼层
说明对001.泥坑.txt 这个文件执行了两次重命名操作
把脚本第三行改为
  1. for /f "delims=" %%a in ('dir /b /a-d *.txt') do set "txt=%%a" & call :aa
复制代码


试试

评分

参与人数 1技术 +1 收起 理由
布布丁 + 1 感谢

查看全部评分

 楼主| 发表于 2023-6-12 00:05:11 | 显示全部楼层
回复 2# 77七
果然好了,感谢感谢!
发表于 2023-6-12 09:43:55 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
  4.     for /f "delims=" %%i in ('type "%%a"') do set Prefix=%%i
  5.     ren "%%a" "!Prefix!_%%a"
  6. )
  7. pause
复制代码
 楼主| 发表于 2023-6-12 12:24:58 | 显示全部楼层
回复 4# qixiaobin0715
如果Prefix是指定行文本(比如第5行),如何改进呢?
发表于 2023-6-12 12:35:51 | 显示全部楼层
  1. @echo off
  2. set LineNo=5
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
  5.     set n=0
  6.     for /f "delims=" %%i in ('type "%%a"') do (
  7.         set /a n+=1
  8.         if !n! equ %LineNo% set Prefix=%%i
  9.     )
  10.     if defined Prefix ren "%%a" "!Prefix!_%%a"
  11.     set Prefix=
  12. )
  13. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
布布丁 + 1 达人

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 18:25 , Processed in 0.018724 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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