Board logo

标题: [文本处理] 如何批量删除文件名最后两个字符之前的所有字符并以递增序号的方式处理重名文件? [打印本页]

作者: wzf1024    时间: 2016-2-20 00:00     标题: 如何批量删除文件名最后两个字符之前的所有字符并以递增序号的方式处理重名文件?

本帖最后由 pcl_test 于 2016-4-15 22:45 编辑

有很多txt文件:
123.txt
1234.txt
12345.txt
……
----------------
只想保留文件名最后两个字:
23.txt
34.txt
45.txt
……

-------------------
大侠,如何实现
作者: ivor    时间: 2016-2-20 09:13

本帖最后由 ivor 于 2016-2-20 12:50 编辑

回复 1# wzf1024
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /b *.txt') do (
  3. set "name=%%a"
  4. rename "%%a" !name:~-6!
  5. )
  6. pause
复制代码
代码很容易,但是你的文件很多,只留两个字符,很容易会文件名重复


刚出炉的新代码:有多少重复的都没问题
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /b *.txt') do (
  3. set "name=%%a"
  4. rename "%%a" "!name:~-6!" 2>nul || call :repeat
  5. )
  6. echo 已经全部处理...... & pause>nul
  7. goto :EOF
  8. :repeat
  9. set /a num+=1
  10. rename "!name!" "!name:~-6,2!(!num!)!name:~-4!" && goto :EOF || goto :repeat
复制代码

作者: bailong360    时间: 2016-2-20 10:01

  1. ren2 -f ".*(..)(\.txt)" "$1$2"
复制代码

作者: wzf1024    时间: 2016-2-20 11:53

回复 2# ivor


    原来的条件,如果需要在出现重复文件名时后面加递增序号如何解决,
如:
1234.txt
2234.txt
替换后:
34.txt
34(1).txt

--------------------
如何实现、谢谢
作者: wzf1024    时间: 2016-2-20 12:06

回复 3# bailong360


    大侠,这不是批处理吧,需要什么软件吗?谢谢
作者: CrLf    时间: 2016-2-20 12:20

回复 2# ivor


    -6好像不对吧
作者: bailong360    时间: 2016-2-20 12:36

回复 5# wzf1024
第三方ren2
作者: ivor    时间: 2016-2-20 12:51

本帖最后由 ivor 于 2016-2-20 12:55 编辑

回复 1# wzf1024


    2楼代码已更新

顺便附带测试专用代码
  1. @echo off&setlocal enabledelayedexpansion
  2. rem 测试专用,生成100个xxxx66.txt
  3. for /l %%a in (1,1,100) do (
  4. echo.>!random!66.txt
  5. )
复制代码

作者: ivor    时间: 2016-2-20 12:52

回复 6# CrLf


    没错啊,我都测试过了
作者: CrLf    时间: 2016-2-20 18:43

回复 9# ivor


    噢,是我晕了,还要算上 .




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