[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

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


试试
1

评分人数

bat小白,请多指教!谢谢!

TOP

回复 2# 77七
果然好了,感谢感谢!

TOP

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

TOP

回复 4# qixiaobin0715
如果Prefix是指定行文本(比如第5行),如何改进呢?

TOP

  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

评分人数

TOP

返回列表