1. 程式人生 > >bat 批處理修改多層文件夾名稱

bat 批處理修改多層文件夾名稱

結果 led bsp 簡潔 dexp 通過 ech info 修改名稱

最近朋友一直抱怨說有一堆的文件夾需要重新修改名稱,一個一個處理非常浪費時間,問有沒有什麽簡潔的方法進行處理。

在明白了朋友的需求後,想到可以寫個bat批處理文件進行處理。

首先分析下朋友的需求:

原文件夾名稱及結構:D:\

----test01

----test02_XXXX_XXXX

----test03_XXXX_XXXX

需要將test01文件夾下的test02下劃線後的內容去掉,並將文件夾test02下的test03文件夾下劃線後面的內容去掉。

修改為:

----test01

----test02

----test03

明白需求後,發現可以通過獲取文件夾的名稱,並通過下劃線區切文件夾名,並利用bat批處理命令的“ren”進行改名。

處理代碼如下:

@echo off&setlocal enabledelayedexpansion
::獲取當前路徑的文件夾名
for /f %%p in (‘dir /ad/b‘) do (
  set p1=
  set p2=--
  ::輸出當前文件夾名稱
  echo %%p
  cd %%p
  ::獲取當前文件夾下的子文件夾名
  for /f %%a in (‘dir /ad/b‘) do (
    set pathname=%%a
    ::通過"_"區切出當前文件夾名的第一個名稱
    for /f "tokens=1 delims=_" %%b in ("!pathname!") do (
      set new_pathname=%%b
    )
    ::更改文件夾名
    ren !pathname! !new_pathname!
    ::輸出當前文件夾下的子文件夾名
    echo !p1!!p2!!pathname!
    ::定位到當前文件夾下的子文件夾名
    cd .\!new_pathname!
    ::獲取當前文件夾下的子文件夾名
    for /f %%c in (‘dir /ad/b‘) do (
      set pathname2=%%c
      ::輸出當前文件夾下的子文件夾名
      echo !p1!!p1!!p1!!p2!!pathname2!
      ::通過"_"區切出當前文件夾名的第一個名稱
      for /f "tokens=1 delims=_" %%d in ("!pathname2!") do (
        set new_pathname2=%%d
      )
      ::更改文件夾名
      ren !pathname2! !new_pathname2!
      )
    cd ..
  )
cd ..
)
pause

處理後的結果:
技術分享圖片

初步實現了文件夾的名稱修改。發給朋友後,朋友在需要修改的路徑下進行了測試,發現有部分文件夾名無法修改,原因是文件夾名中有空格,用上述的代碼無法處理,見下圖:

技術分享圖片

原因批處理命令遇到“space”後便把space前後的命令當成兩個命令,導致一個文件夾名變成兩個,因此提示系統找不到指定文件。

對上述代碼進行修改,加入"tokens=* delims="參數,即將bat默認的以space區分修改為不以space區分,修改後的代碼如下:

@echo off&setlocal enabledelayedexpansion
::獲取當前路徑的文件夾名
for /f %%p in (‘dir /ad/b‘) do (
  set p1=
  set p2=--
  ::輸出當前文件夾名稱
  echo %%p
  cd %%p
  ::獲取當前文件夾下的子文件夾名
  for /f "tokens=* delims=" %%a in (‘dir /ad/b‘) do (
    set pathname=%%a
    ::通過"_"區切出當前文件夾名的第一個名稱
    for /f "tokens=1 delims=_" %%b in ("!pathname!") do (
      set new_pathname=%%b
    )
    ::更改文件夾名
    ren "!pathname!" !new_pathname!
    ::輸出當前文件夾下的子文件夾名
    echo !p1!!p2!!pathname!
    ::定位到當前文件夾下的子文件夾名
    cd .\!new_pathname!
    ::獲取當前文件夾下的子文件夾名
    for /f "tokens=* delims=" %%c in (‘dir /ad/b‘) do (
      set pathname2=%%c
      ::輸出當前文件夾下的子文件夾名
      echo !p1!!p1!!p1!!p2!!pathname2!
      ::通過"_"區切出當前文件夾名的第一個名稱
      for /f "tokens=1 delims=_" %%d in ("!pathname2!") do (
        set new_pathname2=%%d
      )
      ::更改文件夾名
      ren "!pathname2!" !new_pathname2!
      )
    cd ..
  )
cd ..
)
pause

執行上述代碼,結果如下:

技術分享圖片

註意上述代碼中“ren”命令中的第一個參數要用“”引起來,否則命令不起作用。

bat 批處理修改多層文件夾名稱