bat 批處理修改多層文件夾名稱
最近朋友一直抱怨說有一堆的文件夾需要重新修改名稱,一個一個處理非常浪費時間,問有沒有什麽簡潔的方法進行處理。
在明白了朋友的需求後,想到可以寫個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 批處理修改多層文件夾名稱