ggyy020406 wrote:
批次大量移動不同檔案...(恕刪)
把子目錄下的檔案移至上一層
forfiles /s /m *.srt /c "cmd /c if @isdir==FALSE move @file .."
ggyy020406 wrote:
大大我把你的存做py...(恕刪)
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))
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))