Board logo

标题: [文本处理] BAT如何批量把文件名开头几个字符移动到文件名的末尾? [打印本页]

作者: 风陵渡    时间: 2020-3-7 14:24     标题: BAT如何批量把文件名开头几个字符移动到文件名的末尾?

请问如何把多个文件名开头几个字符移动到文件名的末尾。(字符数不固定,希望代码自己能够根据实际要移动的字符修改)

例如:【写字楼】2019年第二季度北京市场概览.pdf     实现批处理后效果:2019年第二季度北京市场概览【写字楼】.pdf   

例如:20100410万科麓湖别墅项目销售培训计划.ppt     实现批处理后效果:万科麓湖别墅项目销售培训计划20100410.ppt


非常感谢!
作者: hlzj88    时间: 2020-3-7 21:21

批处理是把有共性的文件进行批量处理,但你的文件名之间没有共性,即没有一个模式能直接处理所有文件。

在未知字符数的情况下,要取前面的某段字符,起码这些字符也是要有规律的。没有规律批处理是不可以达到目的的。
作者: 风陵渡    时间: 2020-3-8 22:14

回复 2# hlzj88


您好朋友,您可能误会我的我意思了:

比如:我有一批文件,需要把文件名称的前4个字批量移动到文件名的末尾,这个如何写批处理;

再比如我又碰到一批文件,需要把文件名称的前5个字批量移动到文件名的末尾,这个如何在上一个案例的基础上如何修改那;

非常感谢?
作者: hlzj88    时间: 2020-3-9 07:56

本帖最后由 hlzj88 于 2020-3-12 12:19 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. title 数数法调整首尾
  3. set /p zs=你希望把第几个字符后的调整到前面---》
  4. for /f "delims=*" %%i in ('dir /b/on "*.pdf" "*.ppt"') do (
  5.   set "a=%%~xi"
  6.   set "b=%%~ni"
  7.   set "c=%%i"
  8.   set b=!b: =!
  9.   set aa=!b:~0,%zs%!
  10.   set bb=!b:~%zs%,100!
  11.   echo !c! 改为 !bb!!aa!%%~xi>>记录.txt
  12. rem ren !c! !bb!!aa!%%~xi
  13. )
  14. echo 
  15. exit
复制代码
通过试用,你会知道,按同一规则改名的文件要具有同一特征。这个特征就是  都是前面多少位。这个只能你来挑选。
建议,先阅读记录.txt来确认将要产生结果是否每一条都是你要的。
没有问题 删除语句中的 rem 三个字符即可得到改变。
慎用。
作者: Batcher    时间: 2020-3-9 10:45

回复 4# hlzj88


    建议把第9行的,100去掉
作者: hlzj88    时间: 2020-3-10 06:46

回复 5# Batcher

谢谢传授。
作者: 风陵渡    时间: 2020-3-10 14:38

回复 4# hlzj88


    非常感谢老兄指教,在使用的过程中已经能满足大部分文件的批处理,但是有一点小问题,就是处理的文件名中要是存在空格的时候,文件就不会被处理,

比如:2016自媒 网红 社群时代,营销怎么玩?(廊坊新奥).pdf  (自媒和网红后面各有一个空格)

上面例子文件中含有空格,如果要将前4个字符调整到文件尾的话,批处理无法使用,应该是批处理程序自动判定空格前面的为文件名,导致无法处理,请问在批处理过程中,程序有办法可以排除文件中的空格问题吗?

下面是批处理显示的记录,非常感谢!
作者: 风陵渡    时间: 2020-3-10 14:38

回复 5# Batcher


    非常感谢大大
作者: hlzj88    时间: 2020-3-10 21:46

  1. set b=!b: =!
复制代码
插入4楼7  8 之间
作者: 风陵渡    时间: 2020-3-11 14:26

回复 9# hlzj88

  兄弟这样还是不行,带空格的文件无法修改
作者: smss    时间: 2020-3-11 15:23

回复 10# 风陵渡

11换成ren "%%i" "!bb!!aa!%%~xi"
作者: hlzj88    时间: 2020-3-12 12:20

回复 10# 风陵渡

4楼完全修改了




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