1、批量修改文件名

从我这些年使用 Windows 的经验来看,需要批量的修改文件名的时候还是蛮多的。要达到批量的修改文件名的效果,办法也是挺多的,最简单的方法是 Windows 自带的批量修改文件的功能,也可以到网上去下载批量改名工具来实现。

当然,这两种方法我都不喜欢!因为 Windows 自带的改名功能会在文件名后附加“(1)、(2)、(3)……(N)”这种实际可能多余的后缀。而网上下载的那些小工具,往往被植入广告甚至病毒,而且也不一定好用,甚至根本就没用。

早些年我经常用 Windows 自带的改名功能来批量修改图片名,可能有些朋友还不知道这个功能,在这儿我顺带说一下(假如要为 100 张风景图片改名):【选中】那 100 张图片,在任意一张照片上【右键】,然后选择【重命名】,【输入】新名字,然后【回车】。效果如何一测便知!

本节将主要来介绍下如何通过批处理来批量修改文件名。可能你遇到的情况不一样,但思路是一致的,也就是要通过某个的方法来生成一批 ren 指定,然后将其保存到批处理文件中,双击执行即可。这里就来说说我是如何通过批处理来批量修改我下载的美剧视频文件名的。

  • 第一步:将全集视频集中到一个文件夹中,假如这个文件夹是“D:\Workspace\”,启动 cmd 键入dir D:\Workspace /b > D:\Workspace\rens.bat

  • 第二步:右键编辑 rens.bat,依次按 Ctrl+A、Ctrl+C 选中并复制所有文本,新建一个 Excel 文件,选中任意一个 Sheet 的 A1 单元格,按 Ctrl+V 将复制的文本拷贝到 Excel 中去。

  • 第三步:假如你想把这些视频文件命名为“美剧S01E××”,那么你只需在 B1 单元格中输入“美剧S01E01”,然后选中 B1 单元格右下角的点拖动到有文件名称的最后一行。

  • 第四步:在 C1 单元格中输入="ren """&A1&""" """&B1&"""",同样选择右下角的点拖动到有文件名称的最后一行。然后选中 C 列有值的单元格按 Ctrl+C,再到 rens.bat 文件中依次按 Ctrl+A、Ctrl+V、Ctrl+S。

  • 第五步:双击 rens.bat 文件图标……结果如你所想!

2、批量重启服务

现如今开发一个 Web 项目往往会涉及很多后台技术,譬如你用 C# 开发,那么你的网站一般会部署到 IIS 上,网站后台你可能会写一个服务叫 AppService,服务端缓存数据你可能会存储到 Memcached 服务中。这样一来就已经有 3 个服务了,实际上往往需要更多的服务。

在实际开发或测试的时候,我们经常会遇到服务挂掉或出现异常的情况,这时候就需要把服务恢复到初始状态了。那么多服务如果挨个手动重启当然是可以的,但这样做的话效率就太低了,这时候我们就可以通过批处理来实现批量重启服务了。

就拿上面提到的 3 个服务来说,可以通过把如下脚本保存到批处理文件中,然后双击批处理文件来实现批量重启系统中所有需要重启的服务:

net stop AppService net stop memcached iisreset net start memcached net start AppService

3、全盘搜索指定文件

3.1、全盘搜索名称为 mm.jpg 的文件,获取其全路径

写法 1(for + dir + find):

@echo off title 正在搜索,请稍候... echo 正在搜索,请稍候... rem 设定文件名 set "filename=mm.jpg" rem 遍历从 C 到 Z 之间的字母 for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (     rem 如果存在从 C:\ 到 Z:\ 之间的某个磁盘则继续     if exist %%i:\ (         rem /a-d 表示非目录,即所有的文件         rem 2^>nul 表示屏蔽操作失败的回显,如果成功还是会显示         rem | 是命令管道符,表示将前一个命令的执行结果输送到后一个命令         dir /a-d /s /b %%i: 2^>nul | find "%filename%" >> files.txt     ) ) rem 打开 files.txt 文件 start files.txt

1>nul 表示屏蔽操作成功的回显,如果出错还是会显示,在命令的最后面加 1>nul 2>nul 表示同时屏蔽掉正确和错误的信息,这样就不会显示任何消息了。^ 是转义符,一般不需要加在 > 前面,但在 for 循环中使用就必须加上,否则会有语法错误。

写法 2(for /f + dir):

@echo off title 正在搜索,请稍候... echo 正在搜索,请稍候... set "filename=mm.jpg" for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (     if exist %%i:\ (         rem "delims=" 表示取消默认分割,即不分割         for /f "delims=" %%j in ('dir /a-d /s /b "%%i:\*%filename%" 2^>nul') do (             rem "%%~nxj" 表示 for 循环中索引为 %%j 的文件名(含扩展名)             if /i "%%~nxj" equ "%filename%" echo.%%j         )     ) )

写法 3(pushd popd + for /r):

@echo off title 正在搜索,请稍候... echo 正在搜索,请稍候... set "filename=mm.jpg" for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (     if exist %%i:\ (         rem 改变当前目录到 %%i:\,这样就方便使用相对路径了         pushd %%i:\         for /r %%j in (*mm.jpg) do (             if /i "%%~nxj" equ "%filename%" echo.%%j         )         popd     ) )

写法 4(for /f + where):

@echo off title 正在搜索,请稍候... echo 正在搜索,请稍候... set "filename=mm.jpg" for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (     if exist %%i:\ (         rem 此处的 where 为 Windows 自带的命令,单引号包裹表示封装命令         for /f "delims=" %%j in ('where /r %%i: %filename% 2^>nul') do (             if /i "%%~nxj" equ "mm.jpg" echo.%%j         )     ) )

写法 5(for /f + wmic):

@echo off title 正在搜索,请稍候... echo 正在搜索,请稍候... set "filename=mm.jpg" for %%i in (%filename%) do (     rem 接收文件名,不含后缀     set "nName=%%~ni"     rem 接收文件后缀名     set "xName=%%~xi" ) rem 截取 xName 第 1 位之后的字符,即去掉后缀名前的点 set "xName=%xName:~1%" for /f "skip=1 delims=" %%i in (     rem wmic 即 Windows Management Instrumentation(Windows 管理工具)     'wmic datafile where "filename='%nName%' and extension='%xName%'" get name' ) do echo.%%i

第 2~5 种写法参考了:批处理(bat)实现全盘搜索指定文件获取其完整路径方法大全

3.2、查找系统中所有名称以 .docx 结尾的文件

写法 1:

@echo off title 正在搜索,请稍候... echo 正在搜索,请稍候... set drives=C D E F G H I J K L M N O P Q R S T U V W X Y Z for %%i in (%drives%) do (     if exist %%i:\ (         dir /a-d /s /b %%i: 2^>nul | findstr ".doc$" >> files.txt     ) ) start files.txt

写法 2(比写法 1 效率高,但输出的每个文件名后面都会有很多空格):

@echo off title 正在搜索,请稍候... echo 正在搜索,请稍候... for /f "skip=1 delims=" %%i in (     'wmic datafile where "extension='doc'" get name' ) do (echo %%i >> files.txt) start files.txt

4、调用可执行程序

4.1、调用系统自带的应用程序

在 Windows 命令行工具(cmd.exe 和 powershell.exe)中可以直接调用应用程序文件。譬如以 exe 为后缀的可执行文件,以 com 为后缀的命令文件,以 bat 或 cmd 为后缀的批处理文件等都能被命令行工具调用,而且只需在命令提示符后键入基本文件名后回车即可,无需输入后缀名(输入也可以)。

在 Windows 操作系统中有很多实用的可执行程序,譬如记事本、计算器、画板等,这些工具如果通过开始菜单来找到并打开的话,显然是很不方便的。但在开始菜单的“搜索程序和文件”或命令行中启动这些程序却是方便又快捷的,譬如在命令提示符后键入 calc 后按回车即可启动计算器。

常见 Windows 自带可执行程序一览表(其中 .msc 后缀不能省略)

序号启动命令应用程序备注
1cmd.exeCMD
2powershell.exePower Shell
3notepad.exe记事本
4write.exe写字板开始中可用 wordpad.exe
5calc.exe计算器
6soundrecorder.exe录音机
7osk.exe屏幕键盘
8magnify.exe放大镜
9mstsc.exe远程桌面连接
10compmgmt.msc计算机管理
11regedit.exe注册表编辑器
12gpedit.msc本地组策略编辑器
13control.exe控制面板
14lusrmgr.msc本地用户和组
15explorer.exe资源管理器
16taskmgr.exeWindows 任务管理器
17services.msc服务
18taskschd.msc任务计划程序
19diskmgmt.msc磁盘管理
20devmgmt.msc设备管理器
21wf.msc高级安全 Windows 防火墙
22inetmgr.exeInternet 信息服务(IIS)管理器需打开功能
23iisreset.exe重启IIS服务
34at.exe指定在特定时间运行命名或程序
25eventvwr.msc事件查看器
26winver.exe关于 Windows
27hostname.exe显示主机名
28msconfig.exe系统配置
29perfmon.msc性能检测器
30chkdsk.exeChkdsk 磁盘检查
31cleanmgr.exe磁盘清理
32dxdiag.exeDirectX 诊断工具
33fsmgmt.msc共享文件夹
34secpol.msc本地安全策略
35systeminfo.exe显示本机系统信息
36eudcedit.exe造字程序
37charmap.exe字符映射表
38nslookup.exeIP侦测器,退出用exit
39uac用户账户控制设置
40sn记录步骤以再现问题
41mspaint.exe画板默认仅开始中可用
42wmplayer.exeWindows Media Player
43iexplore.exeIE浏览器,默认需添加环境变量默认仅开始中可用
44cliconfg.exeSQL Server 客户端网络实用工具默认仅开始中可用

4.2、调用第三方应用程序

第三方软件如果你知道它的启动程序文件名的话,也可以通过键入命令的方式来启动。譬如 Microsoft Office Excel 可以通过 excel 来启动,Visual Studio 可以通过 devenv 来启动,腾讯通可以通过 rtx 来启动。

某些时候也会有些例外,譬如 Microsoft Office Word 的启动程序是 winword.exe,但你不仅可以通过 winword 来启动,也可以通过 word 来启动,而微信的启动程序是 WeChat.exe,但你却只能通过“微信”来启动,不能通过 wechat 来启动。

部分第三方应用程序命令列表

序号启动命令应用程序备注
1winword.exeMicrosoft Office Word也可用 word
2excel.exeMicrosoft Office Excel
3powerpnt.exeMicrosoft Office PowerPoint
4msaccess.exeMicrosoft Office Access
5visio.exeMicrosoft Office Visio
6devenv.exe最后安装的那个版本的 VS
7code.cmdVisual Studio Code
8notepad++.exeNotepad++
9ssms.exeSQL Server 2008
10sqlwb.exeSQL Server 2005
11isqlw.exeSQL Server 2000
12plsqldev.exePLSQL Developer默认仅开始中可用
13chrome.exeGoogle Chrome默认仅开始中可用

上面两个列表中的大部分应用程序对于某些特定群体而言并不常用,这就意味着很难记住那么多命令。但如果搜集这些命令仅仅是为了打开相应的软件那就太初级了,我们完全可以通过这些命令再结合其它命令来解决实际问题。

曾有一段时间,我工作时需要用到多台电脑,每台电脑上都要安装 PLSQL Developer,安装完之后还得逐个电脑配置环境变量 NLS_LANG,以确保每台电脑上的 SQL 错误提示都是中文。如果不配置环境变量的话,有时候看到数据库中的数据都是乱码(可能跟我用的绿色版有关),但总是全都配置一遍着实有些麻烦。

突然某一天,我发现了一个很好的解决方案,就是把下面的脚本保存到批处理文件中,然后把这个批处理放到 PLSQL Developer 主目录中,再通过批处理来启动 PLSQL Developer。事实上第一次这么干的时候,我还不知道这段脚本的具体含义,但实验结果告诉我——它行得通!

set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK start plsqldev.exe

其实只要你肯想,还可以玩出很多有意思的花样,譬如在执行耗时比较久的命令时,可以通过如下命令给批处理程序加个“背景音乐”:

start /b /low /min wmplayer.exe http://up.haoduoge.com:82/mp3/2017-06-29/1498739481.mp3

5、系统优化案例

5.1、删除桌面快捷方式小箭头

Win7 中必须以管理员身份运行,否则无效

@echo off color 2 reg delete HKCR\lnkfile /v IsShortcut /f reg delete HKCR\piffile /v IsShortcut /f reg delete HKCR\InternetShortcut /v IsShortcut /f taskkill /f /im explorer.exe && explorer

5.2、删除多余右键菜单

Win7 的右键菜单本来就比较多,许多软件还会再给右键添加菜单,当右键菜单过多时会比较难找到对应的菜单,其中有些右键菜单几乎从来都用不着,譬如最恶心(常见)的“NVIDIA 控制面板”等菜单纯属多余。

@echo off color 2 regsvr32 /u /s igfxpph.dll reg delete HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers /f reg add HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\New /ve /d {D969A300-E7FF-11d0-A93B-00A0C90F2719}

注意:上述批处理脚本会把所有非系统右键菜单都删除(最近发现了一个例外 Visual Studio Code 的右键菜单不会被删除)。其实上述脚本背后的原理很简单,本质上就是删除注册表,把代表右键菜单的项(HKEY_CLASSES_ROOT\Directory\background\shellex\ContextMenuHandlers)下的所有子项都删除,只保留 New 那一项即可,对应的注册表示意图如下:
万码学堂,电脑培训,计算机培训,Java培训,JavaEE开发培训,青岛软件培训,软件工程师培训

6、批处理 UI 效果

6.1、功能选择界面

无论是什么程序,一个好的 UI 都是必不可少的,批处理也不例外。如下代码是一个简单的功能选择界面:

@echo off title 功能选择界面 by hanzz color 1A echo. echo               ================================== echo               请选择要进行的操作,然后使劲按回车 echo               ================================== echo. echo               1.系统工具,激活本机,检测大文件 echo. echo               2.网络异常修复工具,自定义屏蔽网站 echo. echo               3.清理系统垃圾 echo. echo               Q.退出 echo. :case set /p choice=请选择: IF NOT "%choice%"=="" SET choice=%choice:~0,1% if /i "%choice%"=="1" goto sys if /i "%choice%"=="2" goto net if /i "%choice%"=="3" goto clear if /i "%choice%"=="Q" goto quit echo 选择无效,请重新选择 goto case :sys echo 请选择了系统工具 goto case :net echo 您选择了网络异常修复 goto case :clear echo 您选择了清理系统垃圾 goto case :quit quit

6.2、进度条效果

如下代码是一个有些丑陋的进度条:

@echo off mode con cols=100 lines=15 & color 1A echo. echo  进度条加载中. . . echo. echo  ┌──────────────────────────────────────┐ set /p a= <nul for /l %%i in (1 1 27) do set /p a= ■<nul & ping /n 1 127.0.0.1>nul echo 100%% echo  └──────────────────────────────────────┘ pause

本人在网上看到一个效果还可以的进度条,链接:批处理进度条

7、总结

我相信通过本文的几个案例已经足够能让你了解到 Windows 批处理的强大和魅力所在。我曾在网上看到有大神用批处理做推箱子、贪吃蛇、俄罗斯方块、五子棋、RPG、杀毒、彩票走势图的,如果你有兴趣也可以到网上去搜索相关案例再看看。下面列举的是几个比较实用或有意思的案例的参考链接:

本文链接http://www.cnblogs.com/hanzongze/p/cmd-batchs.html
版权声明:本文为博客园博主 韩宗泽 原创,作者保留署名权!欢迎通过转载、演绎或其它传播方式来使用本文,但必须在明显位置给出作者署名和本文链接!个人博客,能力有限,若有不当之处,敬请批评指正,谢谢!

1、批量修改文件名

从我这些年使用 Windows 的经验来看,需要批量的修改文件名的时候还是蛮多的。要达到批量的修改文件名的效果,办法也是挺多的,最简单的方法是 Windows 自带的批量修改文件的功能,也可以到网上去下载批量改名工具来实现。

当然,这两种方法我都不喜欢!因为 Window



    本文链接
    http://www.cnblogs.com/hanzongze/p/cmd-batchs.html
    版权声明:本文为博客园博主 韩宗泽 原创,作者保留署名权!欢迎通过转载、演绎或其它传播方式来使用本文,但必须在明显位置给出作者署名和本文链接!个人博客,能力有限,若有不当之处,敬请批评指正,谢谢!

    http://www.cnblogs.com/hanzongze/p/cmd-batchs.html

    网友评论

    更多精彩分享

    Manage dairy business efficiently with Milk Distribution Software-Java培训机构,青岛Java培训,青岛计算机培训,软件编程培训,seo优化培训,网络推广培训,网络营销培训,SEM培训,网络优化,在线营销培训,Java培训Manage dairy business efficiently with Milk Distribution Software