• 3

批次大量移動不同檔案的方法?

ggyy020406 wrote:
批次大量移動不同檔案...(恕刪)

把子目錄下的檔案移至上一層
forfiles /s /m *.srt /c "cmd /c if @isdir==FALSE move @file .."
Ghostwriter wrote:
小程式版放在電影資料...(恕刪)


大大我把你的存做py丟進去執行沒反應
請問要怎麼修改

我的檔案結構是這樣的
一個主資料夾My Video
My Video裡面有各個不同電影的資料夾
各電影資料夾裡都有一個叫Subs的資料夾
Subs資料夾就是放著該電影的外掛字幕
我想做的是批量把字幕全部拉到或是複製到它們各自的電影資料夾
Ghostwriter

py檔放在My Video資料夾上一層,執行它,"輸入My Video"(資料夾名稱)

2022-12-02 0:05
菜叫菜逼巴

大辣辣的盜版自白 這是錢太多嗎?

2022-12-02 9:44
學個 批次檔 能處理很多事.
ggyy020406 wrote:
大大我把你的存做py...(恕刪)

樣子長這樣

批次檔我有點懶得寫
python都看不太懂的,用批次檔估計更慘
我是覺得我寫的沒問題
功能也只是複製、移動檔案
失敗也不會發生甚麼事
有錯的話哪位大大可以提點一下
Ghostwriter wrote:
小程式版放在電影資料...(恕刪)


不好意思,我還是看不懂
是要修改那個位置?

我再開一個叫Test的資料夾把整個My Video和你的py檔丟進去執行也是沒反應

也試過把PATH = input("please enter your folder name : ")
改做
PATH = input("My Video : ")
也是一樣沒反應

Ghostwriter

你沒縮排[吃驚],你直接用下面大大的code好了,我不會弄mobile01的程式區塊,阿如果有name '__file__' is not defined,改baseDir即可

2022-12-02 2:49
ggyy020406 wrote:
請問有沒有方法可以批次一鍵把所有字幕檔案拉到他們自己各自的電影名字資料夾


用 command line 指令與萬用字元寫。

前提是你的檔名事先都有規劃好命名,
有誤字等造成的殘留自己再手動或另加幾行處理。
chiyenms

BTW: 有一堆名稱列表的話,寫 command line 指令 batch 時用 Excel 拉會比較快。

2022-12-02 13:03
放在 My Video 資料夾執行
import os

# 偵測此 py 檔所在資料夾
baseDir = os.path.dirname(__file__)

# 掃描此 py 所在目錄的資料夾
with os.scandir(baseDir) as it:
for entry in it:
if not entry.name.startswith('.') and entry.is_dir():
movieDir = os.path.join(baseDir, entry.name) # 電影資料夾
subDir = os.path.join(baseDir, entry.name, "Subs") # 字幕資料夾
if(os.path.exists(subDir)):
# 把字幕資料夾(subDir)內所有檔案移動到電影資料夾(movieDir)
with os.scandir(subDir) as subIterator:
for subEntry in subIterator:
if subEntry.is_file():
src = os.path.join(subDir, subEntry.name)
dist = os.path.join(movieDir, subEntry.name)
os.rename(src, dist)
print("move {} to {}".format(src, dist))
ren1244 wrote:
放在 My Video...(恕刪)

感謝大大,可以成功執行
中間也發生了一些插曲
如果要移去的資料夾本身裡面已有同名檔案,這個py檔會消失不會執行剩沒問題等待要轉移的檔案
再按執行也沒反應py檔會馬上消失
要人手查找出把有同名檔案的刪掉才可以順利執行
ren1244 wrote:
放在 My Video...(恕刪)

另外大大我這裡有另一種結構,不知道也可以做一樣移動檔案動作嗎

這次是電視集
裡面有13集影片檔案在一起的
但這次在Subs資料夾裡面,每一集的字幕檔他們都各自分了自己的資料夾

My TV \ 電視集資料夾 \ 大字幕資料夾 \ 每一集的字幕檔各自有自己的字幕資料夾

我想要的效果也一樣,丟進My TV可以把所有電視集的所有字幕檔搬去它們自己電視集的資料夾裡
可以幫忙再寫一個嗎?
這個是把所有子資料夾內的檔案搬到第一層資料夾(順便刪除空資料夾)
建議先找幾個檔案測試一下再使用
import os

# 從這層目錄開始扁平化(py 檔所在資料夾為 0,下層資料夾為 1)
startDepth = 1

# 是否自動移除空資料夾
autoRemove = True

# 偵測此 py 檔所在資料夾
baseDir = os.path.dirname(__file__)

# 以下兩個變數作為堆疊
nameStack = [baseDir]
iteratorStack = [os.scandir(baseDir)]

while iteratorStack:
it = iteratorStack[-1]
entry = next(it, None)
if entry is None:
dirname = nameStack.pop()
iteratorStack.pop()
it.close()
if autoRemove and len(os.listdir(dirname)) == 0:
os.rmdir(dirname)
else:
filename = os.path.join(nameStack[-1], entry.name)
if entry.is_dir():
nameStack.append(filename)
iteratorStack.append(os.scandir(filename))
elif len(iteratorStack) > startDepth + 1 and entry.is_file():
dist = os.path.join(nameStack[startDepth], entry.name)
if os.path.exists(dist):
print("因重複檔名無法移動: {}".format(filename))
else:
os.rename(filename, dist)
print("移動 {} 到 {}".format(filename, dist))
  • 3
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?