如何批次檔更改資料夾名稱?
如
C:\PHOTO\1100507-CANON
C:\PHOTO\1100507-CANON\風景
C:\PHOTO\1100507-CANON\人像
C:\PHOTO\1100507-CANON\動物
C:\PHOTO\1100507-NIKON
C:\PHOTO\1100507-NIKON\風景
C:\PHOTO\1100507-NIKON\人像
C:\PHOTO\1100507-NIKON\動物
變成只取上層資料夾的日期XXXXXX七位數加到子目錄名稱上
C:\PHOTO\1100507-CANON
C:\PHOTO\1100507-CANON\1100507-風景
C:\PHOTO\1100507-CANON\1100507-人像
C:\PHOTO\1100507-CANON\1100507-動物
C:\PHOTO\1100507-NIKON
C:\PHOTO\1100507-NIKON\1100507-風景
C:\PHOTO\1100507-NIKON\1100507-人像
C:\PHOTO\1100507-NIKON\1100507-動物
只更改資料夾名稱而裡面的照片皆不動到
感謝您耐心的看完,並協助回答
用批次檔真的不好解,我也不喜歡用批次檔,這問題用python幾行就解決,而且還能跨平台,Windows,MAC,Linux
python跟批次檔一樣都是純文字檔,用記事本或notepad++或vscode都能做
還是希望你能改用python來做這些傳統批次檔在做的事,會讓你的事更輕鬆
#後面是程式註解
import os
for name in os.listdir("."): # 列目py所在的資料夾裡面所有檔案跟資料夾
if os.path.isdir(name):# 如果這個name 是資料夾
for n2 in os.listdir(os.path.join('.',name)): #再列出下一層的資料夾
if os.path.isdir(os.path.join('.',name,n2)): #跟上上一行的檢查相同
oldname = os.path.join('.',name,n2) # 舊資料夾名
k = name.split('-')[0] # 要放在資料夾更名的前綴
newname = os.path.join('.',name,k + '-' + n2) #新名字
os.rename(oldname,newname)
更名完全不影響最後一層資料夾裡的資料跟資料夾....
SORRY抓錯字串分解,已更新上去
感謝japhenchen給的方向與詳細的註解,會試著去學習...
更名前後對照
.\1100507-CANON\人物 .\1100507-CANON\1100507-人物
.\1100507-CANON\動物 .\1100507-CANON\1100507-動物
.\1100507-CANON\風景 .\1100507-CANON\1100507-風景
.\1100507-NIKON\人物 .\1100507-NIKON\1100507-人物
.\1100507-NIKON\動物 .\1100507-NIKON\1100507-動物
.\1100507-NIKON\風景 .\1100507-NIKON\1100507-風景
入門的管道真的超多的,這裡就抽一個影片讓你去跟著玩看看
https://www.youtube.com/watch?v=pFGsLsoWcsY
PS...我是2019年才第一次學python寫Hello World,可能有其他語言基礎,所以學python不過幾天就趕鴨子上架...
核心應該是怎麼把1100507-NIKON拆成1100507跟NIKON,用python的split就可以輕鬆解決,哪怕你中間有幾個-都一樣
至於os.path.join是比較好用來組路徑名稱的方法,用join就可以達成跨平台的問題,比如Windows是用反斜線,某些情況還要雙反斜,linux跟MAC都是用正斜線,如果要跨平台,就交給os.path,join咯!
會比較推python的原因,是語法真的比較好閱讀與理解,甚至不用備註都可以理解,學會python好處也多多,除了一般檔案處理,能做的事還包山包海,ML機器學習,AI、爬蟲、LINE CHAT BOT、網站,就連2A遊戲都能出現python的身影...
如果你的環境沒有python 可以參考下
for /r /d %%i in (*) do (
for /f "Delims=apAP上下/ tokens=1-3*" %%j in ('Echo %%~dpti') do (
Set /a Additional=%%j-1911
Echo Ren "%%~i" "%%~dpi!Additional: =!%%k%%l%%~ni"
)
)
@Echo Off
Setlocal ENABLEDELAYEDEXPANSION
for /r /d %%i in (*) do (
for /f "Delims=apAP上下/ tokens=1-3*" %%j in ('Echo %%~ti') do (
Set /a Additional=%%j-1911
Echo Ren "%%~i" "%%~dpi!Additional: =!%%k%%l%%~ni"
)
)
二個批次檔都只測了下,如果沒問題請將
Echo Ren "%%~i" "%%~dpi!Additional: =!%%k%%l%%~ni"
改成
Ren "%%~i" "%%~dpi!Additional: =!%%k%%l%%~ni"
python與powershell 個人較推powershell因為不需再安裝什麼,雖然我也遇到ps1檔因某些因素執行不了的問題....