我使用此代碼將一個隨機文件從父文件夾(E:\「New folder」)中的每個子文件夾複製到新的目標文件夾(E: \樣本\「新建文件夾」)它的偉大工程]:批處理腳本:重命名複製文件以匹配原始文件夾
@echo off
setlocal EnableDelayedExpansion
cd E:\"New folder"
set t=0
for /d %%i in (*) do (
cd "%%i"
set /A t+=1
set n[!t!]=0
for %%f in (*.jpeg *.jpg *.gif *.bmp *.png) do (
set /A n[!t!]+=1
set "file[!n!]=%%f"
)
set /A "rand=(n[!t!]*%random%)/32768+1"
copy "!file[%rand%]!" E:\samples\"New folder"
cd..
)
pause
但是,我需要複製的文件進行重命名是根據其來源文件夾,如下所示:
如果一個文件名爲DC20140912.jpg起源於名爲「Italy2014」的子文件夾,我需要將其重命名爲「Italy2014.jpg」,該文件源自名爲「Rome2015」的子文件夾,將被重命名爲「Rome2015.jpg」等。
從每個子文件夾只複製一個文件,所以沒有文件名衝突的風險。
請幫
不幸的是,正如我在另一個問題中所解釋的,這個例程似乎有效,但它實際上只是沒有失敗。 'for/d'命令將用隨機數替換'%random%',用* nothing *替換'%rand%'。你正在把文件計入'n [t]',但由於'n'沒有設置,'!n!'將被替換爲* nothing *,所以文件名將被分配給'file []'並且將永遠是最後一個所選組的名稱。 'copy'命令將複製'file []' - 始終是同一個文件 - 在目錄中選擇的最後一個文件。當然,它會每次選擇** a **文件,但始終是同一個文件。 – Magoo
謝謝!做了這個改變(@LotPings)也是如此,效果很好 – Amos