windows 方便的批處理:批量修改文件夾名

2021-03-02 windliang

起因

今天同學有一個批量改文件夾名字的需求,因為非計算機專業的同學電腦肯定不會有 python 或者 java 的環境了,那麼 windows 自帶的批處理編程一定是最好的選擇了,新建一個 .txt,改後綴命為 .bat,雙擊就可以運行了。

利用批處理的一些命令,可以做很多事情,之前在知乎回答過一個問題,一行代碼可以做什麼。

https://www.zhihu.com/question/285586045/answer/445364909

裡邊提到了鎖屏和 windows 計劃任務的結合。

rundll32.exe user32.dll,LockWorkStation

定時關機,1800 秒後關機。

shutdown -s -t 1800

問題

他想把很多個文件夾的名字從 abcd1233-afdasfs 改成 1233 abcd1233-afdasfs,所有文件夾的格式都是 4個字母,4 個數字,然後一個-,最後再跟一些字符。需要做的就是把4個數字添加到文件夾名字的最前面,並且跟一個空格。

嘗試一

我也是第一次寫批處理的程序,但是不慌,編程嘛,重要的是算法,語言的語法查一查就可以了。所以需要解決下邊幾個問題。

定義變量

set name=XXX

注意的是,默認賦值就是賦值字符串,而且也不用加雙引號

如果想賦值數字,需要再 set 後邊添加命令參數 /a。

set /a num=1

取出變量的值,百分號包裹變量名

%name%

輸出變量的值

echo %name%

for循環遍歷所有文件夾名,所有變量都保存在了 %%i變量裡,至於為啥加了兩百分號,不要問,問的話,我也不知道 2333,就是規定而已。此外加了 /d 命令參數,表示遍歷文件夾

for /d %%i in (*) do (

因為我們要取到文件夾名字中的數字,所以要進行切割

set newname=%name:~4,4%
語法就是,字符串變量加冒號加~,然後兩個數字的含義分別是字符串開始的位置以及字符的個數,開始位置從零開始計數

更改文件夾名字

ren oldname newname

還有一個一定會用的,注釋代碼

兩種, :: 加語句,或者 rem 加語句,推薦rem吧,因為:: 我遇到了不知道什麼原因的錯誤。

知道了上邊的一切,就可以寫出代碼了,但寫完之後發現個問題,我們用 %name%並不能得到變量的值,查了查,原來在 for 循環中要用 !name!。並且開頭加上setlocal enabledelayedexpansion。

rem ehco 設置為 off,不然的話運行會顯示每條語句
@echo off
rem 防止中文亂碼的
chcp 65001 
setlocal enabledelayedexpansion 
for /d  %%i in (*) do (   
    set name=%%i
    echo !name! 
    rem 字符串合併,四個數字加上空格再加上之前的名字,不用雙引號
    set newname=!name:~4,4! !name!   
    rem 因為 newname 中有空格,所以要加雙引號
    ren !name! "!newname!"

)   
echo 處理完成 
pause

假如我們有下邊的文件夾

然後把上邊的代碼複製保存為 .bat,執行

很完美,達到預期。

問題升級

寫完代碼以後和同學確認了一下需求,出現了一個問題,有的文件夾名字是 (啊)abcd1233-afdasfs 、(啊啊)abcd1233-afdasfs 這樣的形式,也就是說數字開始的位置不一定是 4 了。怎麼辦呢?

嘗試二

我們只要知道 - 的下標,往前數 4 個數字就可以了,沒有找到什麼直接的方法,找到一種利用 goto 的方案。

goto 語法就是先用 :label定義一個位置,然後 goto label 就可以實現循環了。

所以我們的想法就是遍歷文件夾的名字的字符串,得到 - 的位置。

@echo off
chcp 65001 
setlocal enabledelayedexpansion 
for /d  %%i in (*) do (   
    set name=%%i
    echo !name!
    set str=%%i 
    set /a num=0 
      :next
    if  not !str!=="" ( 
       set /a num+=1
         if "!str:~0,1!"=="-" goto last
       set str=!str:~1!  
       goto next
    )
    set /a num=0 
    :last
    echo 字符-在字符串"!name!"中的首次出現位置為!num!
    set newname=!name:~4,4! !name!   

)   
echo 處理完成 
pause

理想是美滿的,現實是殘酷的,本以為解決了,然後運行測試了一下。

比如我們有下邊樣子的文件夾

然後把上邊的代碼保存成 .bat 執行會發現結果是下邊的樣子

- 的位置找對了,但是…為什麼只找了一次,我們的for循環怎麼沒用了 。

幾經試探,搜索。發現微軟的批處理命令不知道基於什麼考慮,如果我們在 for 循環中用了 goto,那麼 for 循環就會自動結束。沒辦法,我們得換思路了。

最終嘗試

網上找了找,找到一種截取某一個字符前的字符串的方法。

for /f "delims=-" %%n in ('echo %%i') do ( 
)

這裡的 %%n 就會保存 - 前邊的字符串了。然後我們保存倒數四個的字符串就可以了。而倒數其實也提供了方法。

截取通過倒數方式指定開始位置的整個字符串:%key:~-2%,表示截取從倒數第 2 個字符開始的整個字符串
正數倒數方式相結合:%key:~2,-2%,表示截取從下標 2 開始到倒數第 2 個之間的字符串

所以我們最後的代碼就是下邊的了,注意用等號賦值的時候可能習慣左右加空格,這裡就不要加了,會出錯。

@echo off
chcp 65001 
setlocal enabledelayedexpansion 
for /d  %%i in (*) do (    
    echo %%i
      rem set newname=%%i 
    for /f "delims=-" %%n in ('echo %%i') do ( 
       set name=%%n
       set newname=!name:~-4! %%i
   )
   ren "%%i" "!newname!"
)   
echo 處理完成 
pause

執行前的文件夾

執行上邊的代碼

執行後的文件夾

完美!

結束

大功告成了。只能說批處理的命令坑太多了,非常不習慣,和現代程式語言太多的不同了。唯一的好處就是不用搭環境,寫個文本文件直接運行。但對於這些文件處理,推薦學一下 python ,就會體會到優雅了。

另外知乎之前回答的那個一句代碼實現鎖屏的效果如下。

然後和 windows 的計劃任務結合,每隔一小時執行,就可以作為簡單的定時休息了,具體方法點擊閱讀原文可以到知乎看一下。

相關焦點

  • 批量修改已有文件夾名稱
    有時候我們需要批量修改一些文件夾的名稱,一個一個修改很浪費時間,我們可以使用批處理命令來批量修改文件夾名稱。首先,我們需要提取文件夾的名稱,我們建一個文本文件,在裡面輸入「DIR *.雙擊後這個需要改名的文件夾名稱就提取出來了
  • 如何批量複製文件夾中的文件或者文件夾名字方法
    簡單的複製文件名字大家都會,但是如果一個文件夾裡面有好多文件或者文件夾,我們想複製這些文件或者文件夾的名稱,一個一個複製是不是就很麻煩了,如何批量複製文件夾中的文件或者文件夾名字和路徑,今天就教大家利用一個腳本1秒批量提取電腦文件夾中的所有文件名字?
  • 如何快速修改和批量圖片大小尺寸
    日常生活中我們免不了遇到修改圖片尺寸來符合要求,如上傳證件照,上傳指定大小的圖片等等。修改方法有多種,如windows系統自帶的畫圖、PS等等,但不是設置太麻煩,就是軟體太複雜,要是有一種即簡單又方便的辦法就好了!下面就介紹一種快速修改及批量修改圖片大小尺寸的方法。
  • excel批處理:如何按給定目錄批量創建系列文件夾
    如果不能批量創建的話,2個小時能完成就算不錯了。答案是利用MD命令進行批處理。1.認識MD命令Md(make directory)是在DOS作業系統中用來建立目錄的命令,利用Md命令可以創建多級目錄。第一步:在EXCEL中根據領導要求的,按照一級目錄、二級目錄、三級目錄的等級進行文件夾名稱整理。
  • Photoshop怎麼批量處理照片?批量添加水印和文本、美化圖片
    學生畢業證照片需要添加文本信息,Boss要求給公司專利圖片添加水印,女朋友讓美化上百張照片……不要覺得這個工作量很大,Photoshop批處理輕鬆完成,批量添加水印和文本、批量美化圖片,只需簡單幾步,動動滑鼠,工作生活都能輕鬆應付。
  • windows中常見的批處理命令
    在windows操作中,我們會用bat後綴的文件進行批處理所謂批處理(Batch),也稱為批處理腳本。
  • 使用Excel來製作批命令完成重複工作
    下面,我們來看看批量操作的辦法,主要操作辦法就是藉助表格工具和批命令。一、文件夾批量創建1、用Excel批量製作命令。主要操作辦法為在Excel裡面批量創建需要生成的文件夾名稱,然後再使用表格的便利性,批量生成命令。
  • 需要經常處理大量文件的人看過來,這裡有個神器能幫你批量完成
    批量修改文件名:支持對所有文件的文件名批量修改,同時可以自定義多個修改規則批量修改文件夾名:支持對所有文件夾的名稱批量修改批量修改文件內容:不需要安裝Office/Pdf查看器等軟體,支持對Word文檔/Excel文檔/Pdf文檔/Txt文檔的內容進行批量修改與替換,同時可以自定義多個修改規則批量修改文件擴展名:支持對所有文件的文件擴展名批量修改
  • 只要5秒,批量提取文件名,快速建立EXCEL工作檯文件路徑 - 點墨樓
    無門檻通用bat法——用批處理腳本提取文件名>>>>提取當前文件夾下的文件、文件夾名稱(不含子文件夾)新建一個文本文檔,命名為「提取文件名」。打開文本文檔,輸入公式:dir *.
  • 這個40M的小工具助你在windows下處理數據如虎添翼!!
    使用windows系統時,如何獲取一個大小為1M的文件的行數呢?
  • PS如何批量處理圖片?告別重複機械操作!
    有關ps的,恕我使用的少而今天才用到並發現此功能有時候我們需要批量處理圖片,每一張都是重複機械操作,且不能有不一致的操作比如我今天要做一個逐幀動畫,即用很多圖片以短間隔連續播放,靜態圖片由於人的視覺暫留而形成動畫
  • 美圖秀秀批處理功能 幫你批量打造靚照
    不過要是照片數量很多,即便只是黯淡問題要提亮,處理起來也並不輕鬆,而且簡單的機械重複會讓人覺得乏味,要是能一起處理多好?想法不錯哦,正好有美圖秀秀的批量處理來幫忙,不光提亮照片,還有加水印、修改統一尺寸,再多的照片也可以在一分鐘內通通搞定,不信?
  • Microsoft Excel怎麼批量快速修改批註?
    如果需要對單元格的批註進行批量修改,幾個批註處理起來很簡單,但是批註過多該怎麼辦呢?通過Microsoft Excel菜單欄中的【開始】選項卡中的【替換】功能?但這個功能只針對Microsoft Excel工作表中的單元格。有什麼便捷的辦法可以快速完成這項工作呢?在講解這個問題之前,先熟悉一下如何給Microsoft Excel單元格添加批註。
  • 【學霸筆記】Windows基礎知識
    cd:切換目錄的命令  例:cd C:\WINDOWS\repairdir:查看當前目錄下文件 例:dirmd:創建文件夾  例:md + 文件夾名稱rd:刪除文件夾  例:rd + 文件夾名稱copy:文件複製命令  例:copy+源文件路徑+目的路徑,可以複製文件夾中的文本但不包括子文件夾cls:清屏
  • 怎麼使用批處理bat設置靜態IP位址?
    我們可以根據計算機的DOS命令編輯一個批處理文件,只需輕輕動一下滑鼠或鍵盤,就可以讓計算機的IP位址在動態與靜態間來回切換。思路:製作批處理文件,需要新建一個【文本文檔】,將命令輸入到【文本文檔】中,然後將【文本文檔】的擴展名【*.txt】更改為【*.bat】。
  • 照片批量處理工具
    今天給大家分享的是一款照片批量處理的小工具,適用平臺:windows功能有照片批量重命名,批量添加水印,批量裁剪,批量縮小圖片尺寸(批量縮略圖片),批量旋轉(順時針旋轉,逆時針旋轉,左右翻轉,上下翻轉),智能旋轉(自動旋轉帶有方向信息的照片),批量校正拍攝日期,刪除exif參數信息,添加備註信息,刪除備註信息,,精簡圖片……,照片處理不是我們經常用的功能
  • 享受高效P圖 美圖秀秀批處理功能來了
    美圖秀秀電腦版V3.7為我們帶來了批處理功能,輕鬆就能幫我們完成圖片特效、圖片尺寸、圖片水印等批量處理,處理照片省時省力!  批量處理功能在美圖秀秀V3.7新版軟體中是以小工具的形式出現,啟動美圖秀秀V3.7新版軟體,在歡迎界面即有批處理入口,首次點擊之後會提示安裝批處理小工具,安裝成功即可使用。
  • 遊戲修改?微軟Windows 10出現ModifiableWindowsApps文件夾
    該文件夾包含某些PC遊戲的數據,它與PC遊戲修改功能相關聯。根據UWP指南文檔,「ModifableWindowsApps」文件夾可能包含允許用戶為遊戲安裝mod的安裝文件。微軟表示,該功能旨在供某些類型的PC遊戲使用,開發人員可以為其遊戲指定一個或多個子文件夾。
  • iOS怎麼隱藏文件夾名字_iPhone文件夾名字變空白方法
    iOS怎麼隱藏文件夾名字_iPhone文件夾名字變空白方法 2017-08-07 11:44 | 作者:leidian | 來源:265G QQ群號:624022706
  • 別再一個一個的手動編輯修改了,要學會用Word批處理技巧!
    本文轉載自【微信公眾號:清雨的小鎮,ID:Andylove_it】經微信公眾號授權轉載,如需轉載與原文作者聯繫文檔編輯完成以後,發現許多處內容需要整體修改和調整,怎麼辦?一處一處的去手動修改、編輯?那樣效率太低,而且容易出現紕漏。