iT邦幫忙

0

如何批次檔更改資料夾名稱?

bat

如何批次檔更改資料夾名稱?


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-動物

只更改資料夾名稱而裡面的照片皆不動到

感謝您耐心的看完,並協助回答

看更多先前的討論...收起先前的討論...
微笑 iT邦新手 4 級 ‧ 2021-05-07 11:09:28 檢舉
這問題算月經文嗎
x721221 iT邦新手 5 級 ‧ 2021-05-07 11:59:01 檢舉
wwww
x721221 iT邦新手 5 級 ‧ 2021-05-07 11:59:33 檢舉
應該算
通常自己發問(O)
通常別人發問(X)

通常自己公審別人(O)
通常別人公審自己(X)
微笑 iT邦新手 4 級 ‧ 2021-05-07 12:01:49 檢舉
說公審有點過份...
我想說類似的問題看到蠻多次的...剛剛去看才發現原來都是樓主的文,那可能不算月經文;是我資歷太淺,打擾到你的問題,不好意思xD
x721221 iT邦新手 5 級 ‧ 2021-05-07 13:39:47 檢舉
都是同一個人發的文那算月經文吧,一直看到的話
微笑 iT邦新手 4 級 ‧ 2021-05-07 13:53:39 檢舉
我覺得如果之前的答案沒解決你的問題,才繼續發問的話不算
所以挺不好意思的xD
微笑 iT邦新手 4 級 ‧ 2021-05-07 13:54:54 檢舉
不過既然你都這樣問了
個人淺見認為,問題能一次問完當然會更好
微笑 iT邦新手 4 級 ‧ 2021-05-07 13:56:50 檢舉
像是之前有人建議你使用python寫,python還可以打包成exe執行檔 (雖然有點麻煩)
這類改檔名的問題如果你當時去學python的話應該都可以自力解決才對
x721221 iT邦新手 5 級 ‧ 2021-05-07 14:05:43 檢舉
不過既然你都這樣問一次了
個人深見認為,問題能要亂干擾人問完當然會更好
建議python的應該是我,我這次就用python解題

2 個回答

5
japhenchen
iT邦大師 1 級 ‧ 2021-05-07 14:12:55
最佳解答

用批次檔真的不好解,我也不喜歡用批次檔,這問題用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抓錯字串分解,已更新上去

x721221 iT邦新手 5 級 ‧ 2021-05-07 14:17:34 檢舉

感謝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的身影...

1
蟹老闆
iT邦大師 1 級 ‧ 2021-05-09 04:59:44

如果你的環境沒有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檔因某些因素執行不了的問題....

我要發表回答

立即登入回答