Board logo

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

作者: 布布丁    时间: 2023-6-11 23:37     标题: 批处理重命名文件名后,第一个文件名出现重复文本,如何解决?

本帖最后由 布布丁 于 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.双胞胎熊猫)。
请帮忙看看为什么第一个文件名中会出现重复?该如何修正脚本呢?
作者: 77七    时间: 2023-6-11 23:53

说明对001.泥坑.txt 这个文件执行了两次重命名操作
把脚本第三行改为
  1. for /f "delims=" %%a in ('dir /b /a-d *.txt') do set "txt=%%a" & call :aa
复制代码


试试
作者: 布布丁    时间: 2023-6-12 00:05

回复 2# 77七
果然好了,感谢感谢!
作者: qixiaobin0715    时间: 2023-6-12 09:43

  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

回复 4# qixiaobin0715
如果Prefix是指定行文本(比如第5行),如何改进呢?
作者: qixiaobin0715    时间: 2023-6-12 12:35

  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
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2