批处理实现批量修改文件名

我们已经会使用循环命令对大量文件改名进行批量处理。但总结一下,该批处理并不是很健壮。

判断一个程序的好坏,往往不是站在程序员的角度,而从用户的角度出发。

比如:在用户使用它的时候,如果输入了不正确的路径格式怎么办?如果输入了含有非法符号的前缀怎么办?输入的扩展名也有问题怎么办?改完名后看不到是否执行成功的反馈信息,等等。带着这些想法,我们将原程序再次修改一下。

:::::::批量修改文件名.bat:::::::
@echo off
title 批量修改文件名
setlocal EnableDelayedExpansion
:: 启用延迟变量扩充

:GetPath
set zpath=%CD%
:: 对变量进行初始化,防止用户不输入而直接跳过。其中%CD%表示当前路径
set /p zpath=请输入目标文件所在的路径:
if %zpath:~0,1%%zpath:~-1%=="" set zpath=%zpath:~1,-1%
:: 检查变量 zpath 的第一个和最后一个字符是否为 "" ,是的话就去掉
if not exist "%zpath%" goto :GetPath
:: 如果 zpath 值的路径不存在,就得跳转回去,要求重新输入

:GetPrefix
set prefix=未命名
set /p prefix=请输入文件名前缀(不能包含以下字符\/:*?"<>|):
for /f "delims=\/:*?<>| tokens=2" %%i in ("z%prefix%z") do goto :GetPrefix
:: 这里对变量 perfix 进行检查,发现有非法符号便跳转到 :GetPrefix
:: 事实上,这里并没有对双引号 " 进行检测,因为双引号无法在此被转义为可用的分隔符
:: 即使是在这个程序里,不正确地使用双引号也会引起程序异常而退出。
:: 因此,想把它做的非常人性化并不是一件容易的事情

:GetExt
set ext=.*
set /p ext=请输入文件的扩展名(不输入则表示所有类型):
if not "%ext:~0,1%"=="." set ext=.%ext%
:: 检查变量 ext 的第一个是否为句点 . ,不是的话就加上
:: 建议这里对变量 ext 也检查一下,发现有除*外的非法符号便跳转到 :GetExt

set answer=N
echo.
echo 您试图将 %zpath%\ 里的所有 %ext% 类型的文件以 %prefix% 为前缀名进行批量改名,是否继续?
set /p answer=继续请输入 Y ,输入其它键放弃...
if "%answer%"=="Y" goto :ReadyToRename
if "%answer%"=="y" goto :ReadyToRename

echo 放弃文件改名,按任意键退出... & goto :PauseThenQuit

:ReadyToRename

set /a num=0
echo.

if "%ext%"==".*" (
  for %%i in ("%zpath%\*%ext%") do (
    set /a num+=1
    ren "%%i" "%prefix%!num!%%~xi" || echo 文件 %%i 改名失败 && set /a num-=1
  )
) else (
  for %%i in ("%zpath%\*%ext%") do (
    set /a num+=1
    ren "%%i" "%prefix%!num!%ext%" || echo 文件 %%i 改名失败 && set /a num-=1
  )
)

if %num%==0 echo %zpath%\ 里未发现任何文件。按任意键退出... & goto :PauseThenQuit

echo 文件改名完成,按任意键退出...

:PauseThenQuit
pause>nul
::::::::::::::::::::::::::::::::
(0)

相关推荐

  • 文件名修改的批处理

    复制代码 代码如下: @echo off & setlocal enabledelayedexpansion echo -==文件名称替换(去除文件名中的_v2和_V3)==- echo. echo. set /p folder=请输入一个路径: for /r %folder% %%i in (*) do ( set file=%%i set file=!file:_v2=! set file=!file:_v3=! if %%i neq !file! (move "%%i"

  • 批处理重命名特殊文件名的代码

    一b!a!1235@_ s%#8i 三 c.rar h^e12 0~%l%!p!@. s321-的文件.txt %o%%% !O!ffi9~ ce$- Wor8d29 文档.docx 重命名.bat 图1: 要求运行批处理将这三个文件文件名中的数字.汉字.特殊字符全部(含空格)去掉,而重命名为只含字母的文件,但 后缀名不能更改,同时批处理自身名字不能更改,重命名后: basic.rar helps.txt oOfficeWor.docx 重命名.bat 图2: 要求:代码简洁.通用.效率不至于太

  • 用批处理重命名文本文件名的代码

    实现代码1@echo off&setlocal enabledelayedexpansion for /f "delims=" %%a in ('dir/b *.txt') do (    set /a n+=1    if not exist "!n!.txt" (ren "%%a" "!n!.txt") else call :loop "%%a" ) pause&exit :loop  

  • 批量列出所有文件名的批处理

    快速列出目录下的所有文件名称. 用法:把一下代码保存为*.bat格式,放到目标根目录下双击就OK了 复制代码 代码如下: @echo off set startDir = %CD% if(%1)==('help') GOTO USAGE IF (%1)==() ( set work_dir=%cd% ) ELSE ( set work_dir=%1 ) cd /d %1 SET counter=0 REM * dir /B /A:-D %1 > upx8.txt REM * FOR /F %%i

  • 迅速删除非法文件名的批处理代码

    例如 .. con nul 等等 两行代码搞定,迅速删除使用非法文件名的文件及文件夹  2007年06月04日 星期一 19:08 复制代码 代码如下: DEL /F /A /Q \\?\%1  RD /S /Q \\?\%1 保存为 .bat 或者 .cmd 文件即可. 以后遇到什么 runauto..,com1 之类的,只要将其从资源管理器拖动到此批处理文件上,黑窗口闪过,文件(夹)立即消失. 这个方法 很好用的 不过是有漏洞的 没有过滤掉& 所以我们就可以执行代码啦 呵呵 有两个关键 1.

  • 批处理实现批量修改文件名

    我们已经会使用循环命令对大量文件改名进行批量处理.但总结一下,该批处理并不是很健壮. 判断一个程序的好坏,往往不是站在程序员的角度,而从用户的角度出发. 比如:在用户使用它的时候,如果输入了不正确的路径格式怎么办?如果输入了含有非法符号的前缀怎么办?输入的扩展名也有问题怎么办?改完名后看不到是否执行成功的反馈信息,等等.带着这些想法,我们将原程序再次修改一下. :::::::批量修改文件名.bat::::::: @echo off title 批量修改文件名 setlocal EnableDel

  • java批量修改文件名的实现方法

     java批量修改文件名的实现方法 初次学习java,被java的灵活性和简洁的思路所吸引 需求: 看到java视频在播放器列表中的文件名很长,每次都需要拉长列表才能看清全名,故写此代码批量修改该文件夹下所有文件名 实现代码: import java.io.*; class filesRename { public static void main(String[] args) throws IOException { String str1 = new String("这里是需要删除的文件名前

  • python批量修改文件名的实现代码

    #coding:utf-8 #批量修改文件名 import os import re import datetime re_st = r'(\d+)\+\s?\((\d+)\)' #用于匹配旧的文件名,需含分组 re_match_old_file_name = re.compile(re_st) #要修改的目录 WORKING_PATH = r'F:\Gallery' #---------------------------------------------------------------

  • Python实现批量修改文件名实例

    本文实例讲述了Python实现批量修改文件名的方法.分享给大家供大家参考.具体如下: 下载了评书<贺龙传奇>,文件名中却都含有xxx有声下载,用脚本将其去掉.脚本涉及os.rename重命名方法,str.partition方法使用, 及正则match,search方法区别 # encoding:utf-8 ## # 文件名如: # 贺龙传奇\d+[有声下吧www.ysx8.com].mp3 ## import os,re fs=os.listdir('单田芳_贺龙传奇') for f in f

  • 视频合并时使用python批量修改文件名的方法

    不知道大家有没有遇到这样的情况,比如视频合并时文件名没有按照正常顺序排列,像这样 可见,文件名排序是乱的.这个样子合并出来的视频一定也是乱的.所以得想办法把文件名修改一下,让软件读取出正确的顺序.闲话少说,上代码. """ 注意:一.文件名除去扩展名必须以 '_' + 数字 结尾.  二.convert.py 放在文件目录.  三.目录中不能有多余文件 主要算法: 根据最大数字的位数添加0 例如,如果最大数字为123,那么位数为3位,  1就要变成001.2变成002.23变

  • PHP实现批量修改文件名的方法示例

    本文实例讲述了PHP实现批量修改文件名的方法.分享给大家供大家参考,具体如下: 需求描述: 某个文件夹下有100个文件,现在需要将这个100个文件的文件名后添加字符串Abc(后缀名保持不变). 代码实现: 方法一 <?php $dir = __DIR__."\image\\"; $list = scandir($dir); foreach ($list as $item) { if(!in_array($item,['.','..'])){ $arr = explode(&quo

  • python实现批量修改文件名

    python3实现批量修改文件名,供大家参考,具体内容如下 以批量修改某文件夹下所有图片名称为例,注释超详细,万能模板,读者可举一反三,适当修改模板,效果显著! #批量修改文件名 #批量修改图片文件名 import os import re import sys def renameall(): fileList = os.listdir(r"C:\Users\Administrator\Desktop\stars") #待修改文件夹 print("修改前:"+st

  • python实现多进程按序号批量修改文件名的方法示例

    本文实例讲述了python实现多进程按序号批量修改文件名的方法.分享给大家供大家参考,具体如下: 说明 文件名命名方式如图,是数字序号开头,但是中间有些文件删掉了,序号不连续,这里将序号连续起来,总的文件量有40w+,故使用多进程 代码 import os import re from multiprocessing import Pool def getAllFilePath(pathFolder,filter=[".jpg",".txt"]): #遍历文件夹下所

  • 使用python批量修改文件名的方法(视频合并时)

    不知道大家有没有遇到这样的情况,比如视频合并时文件名没有按照正常顺序排列,像这样 可见,文件名排序是乱的.这个样子合并出来的视频一定也是乱的.所以得想办法把文件名修改一下,让软件读取出正确的顺序.闲话少说,上代码. """ 注意:一.文件名除去扩展名必须以 '_' + 数字 结尾.  二.convert.py 放在文件目录.  三.目录中不能有多余文件 主要算法: 根据最大数字的位数添加0 例如,如果最大数字为123,那么位数为3位,  1就要变成001.2变成002.23变

  • Java实现批量修改文件名和重命名的方法

    平时下载的文件.视频很多都会有网址前缀,比如一些编程的教学视频,被人共享出来后,所有视频都加上一串长长的网址,看到就烦,所以一般会重命名后看,舒服很多,好了,不多说,直接上代码: 以下代码演示使用递归的方式批量重命名文件 import java.io.File; import java.io.IOException; /** * @Auther: Code * @Date: 2018/9/9 18:02 * @Description: 批量重命名文件 */ public class test {

随机推荐