" 1、批量修改文件名 " " 2、批量重啟服務 " " 3、全盤搜索指定文件 " "3.1、全盤搜索名稱為 mm.jpg 的文件,獲取其全路徑" "3.2、查找系統中所有名稱以 .docx 結尾的文件" " 4、調用可執行程式 " "4.1、調用系統自帶的應用程式" "4.2、調用第三方應用程式" ...
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 尾碼不能省略)
序號 | 啟動命令 | 應用程式 | 備註 |
---|---|---|---|
1 | cmd.exe | CMD | |
2 | powershell.exe | Power Shell | |
3 | notepad.exe | 記事本 | |
4 | write.exe | 寫字板 | 開始中可用 wordpad.exe |
5 | calc.exe | 計算器 | |
6 | soundrecorder.exe | 錄音機 | |
7 | osk.exe | 屏幕鍵盤 | |
8 | magnify.exe | 放大鏡 | |
9 | mstsc.exe | 遠程桌面連接 | |
10 | compmgmt.msc | 電腦管理 | |
11 | regedit.exe | 註冊表編輯器 | |
12 | gpedit.msc | 本地組策略編輯器 | |
13 | control.exe | 控制面板 | |
14 | lusrmgr.msc | 本地用戶和組 | |
15 | explorer.exe | 資源管理器 | |
16 | taskmgr.exe | Windows 任務管理器 | |
17 | services.msc | 服務 | |
18 | taskschd.msc | 任務計劃程式 | |
19 | diskmgmt.msc | 磁碟管理 | |
20 | devmgmt.msc | 設備管理器 | |
21 | wf.msc | 高級安全 Windows 防火牆 | |
22 | inetmgr.exe | Internet 信息服務(IIS)管理器 | 需打開功能 |
23 | iisreset.exe | 重啟IIS服務 | |
34 | at.exe | 指定在特定時間運行命名或程式 | |
25 | eventvwr.msc | 事件查看器 | |
26 | winver.exe | 關於 Windows | |
27 | hostname.exe | 顯示主機名 | |
28 | msconfig.exe | 系統配置 | |
29 | perfmon.msc | 性能檢測器 | |
30 | chkdsk.exe | Chkdsk 磁碟檢查 | |
31 | cleanmgr.exe | 磁碟清理 | |
32 | dxdiag.exe | DirectX 診斷工具 | |
33 | fsmgmt.msc | 共用文件夾 | |
34 | secpol.msc | 本地安全策略 | |
35 | systeminfo.exe | 顯示本機系統信息 | |
36 | eudcedit.exe | 造字程式 | |
37 | charmap.exe | 字元映射表 | |
38 | nslookup.exe | IP偵測器,退出用exit | |
39 | uac | 用戶賬戶控制設置 | |
40 | sn | 記錄步驟以再現問題 | |
41 | mspaint.exe | 畫板 | 預設僅開始中可用 |
42 | wmplayer.exe | Windows Media Player | |
43 | iexplore.exe | IE瀏覽器,預設需添加環境變數 | 預設僅開始中可用 |
44 | cliconfg.exe | SQL Server 客戶端網路實用工具 | 預設僅開始中可用 |
4.2、調用第三方應用程式
第三方軟體如果你知道它的啟動程式文件名的話,也可以通過鍵入命令的方式來啟動。譬如 Microsoft Office Excel 可以通過 excel 來啟動,Visual Studio 可以通過 devenv 來啟動,騰訊通可以通過 rtx 來啟動。
某些時候也會有些例外,譬如 Microsoft Office Word 的啟動程式是 winword.exe,但你不僅可以通過 winword 來啟動,也可以通過 word 來啟動,而微信的啟動程式是 WeChat.exe,但你卻只能通過“微信”來啟動,不能通過 wechat 來啟動。
部分第三方應用程式命令列表
序號 | 啟動命令 | 應用程式 | 備註 |
---|---|---|---|
1 | winword.exe | Microsoft Office Word | 也可用 word |
2 | excel.exe | Microsoft Office Excel | |
3 | powerpnt.exe | Microsoft Office PowerPoint | |
4 | msaccess.exe | Microsoft Office Access | |
5 | visio.exe | Microsoft Office Visio | |
6 | devenv.exe | 最後安裝的那個版本的 VS | |
7 | code.cmd | Visual Studio Code | |
8 | notepad++.exe | Notepad++ | |
9 | ssms.exe | SQL Server 2008 | |
10 | sqlwb.exe | SQL Server 2005 | |
11 | isqlw.exe | SQL Server 2000 | |
12 | plsqldev.exe | PLSQL Developer | 預設僅開始中可用 |
13 | chrome.exe | Google 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 那一項即可,對應的註冊表示意圖如下:
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
版權聲明:本文為博客園博主 韓宗澤 原創,作者保留署名權!歡迎通過轉載、演繹或其它傳播方式來使用本文,但必須在明顯位置給出作者署名和本文鏈接!個人博客,能力有限,若有不當之處,敬請批評指正,謝謝!