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

[文件操作] 【已解决】BAT脚本批量个性化的文件名修改问题

本帖最后由 holley 于 2018-10-8 15:05 编辑

最初打算将某个文件夹内的所有文件在原文件名的基础上截取字段并随机命名
1、首先试了试随机命名的代码
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir/s/b/a-d F:\pcsofts\test\') do ren "%%a" !random!!random!.*
  4. pause
复制代码
2、后面在做文件名截取的时候突然发现,文件名长度多数不一致,而且共同特征不明显,遂放弃。
3、再想到不如索性以当前日期、时间依次按1个字符的步长穿插到原文件名中
4、先尝试直接加在原文件名后面
  1. @echo off
  2. set datetime=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
  3. echo %datetime%
  4. for /f %%i in ('dir /s/a-d /b F:\pcsofts\test\') do ren %%i %%~ni%datetime%.*
  5. pause
复制代码
目前有个问题是:如果文件名中有空格 是加不上的,不知道咋个处理...
【已解决】
  1. @echo off
  2. set datetime=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
  3. echo %datetime%
  4. for /f "delims=" %%i in ('dir /s/a-d /b F:\pcsofts\test\') do ren "%%i" "%%~ni%datetime%.*"
  5. pause
复制代码
5、开始尝试按文件名长度,依次插入
比如文件名是filename,插入完成后应该变为:f2i0l1e8n1a0m0e6
如果文件名不够,就不再插入,比如file只需要变成f2i0l1e8
如果文件名足够长,就把文件名截取到日期时间完全插入完毕为止,比如现在是21点31分49秒,插入完后文件名称filefilefilefilenameeeeee变成f2i0l1e8f1i0l0e6f2i1l3e1f4i9l即可。
到这步就再次卡住了,,,不知道以什么方式插入原文件名 step还是for?
我是不是有点作...
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 2# Batcher

奇怪!貌似还没生效...

TOP

回复 2# Batcher
加双引号后还需要在变量前面添加"delims="才生效。
继续琢磨依次插入的问题

TOP

本帖最后由 holley 于 2018-10-7 20:13 编辑

回复 5# Batcher


    非常感谢!我先研究研究!

日期时间的问题倒是不用深究,,本来就是一时兴起 测试玩玩

TOP

回复 5# Batcher


    基本上已经相当完整了,还在学习中。

暂时发现一个小bug:
短文件名不会出现,长的会出现一个问题
比如文件名:
源代码canvas鼠标移动动态星空背景特效1.txt
源代码canvas鼠标移动动态星空背景特效2.txt

运行会提示重名 只会修改其中一个

短文件名如:批量重命名1.bat、批量重命名2.bat、批量重命名3.bat
则修改正常。

TOP

回复 9# Batcher
理解你说的意思,也回过神来了 ,多谢你们的解答!我结贴吧。

TOP

回复 8# flashercs
你的方案 插入生效了 但如果文件名过长 没有丢弃文件名过长的部分

TOP

返回列表