2017-04-24 112 views
0

我使用此代碼將一個隨機文件從父文件夾(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」等。

從每個子文件夾只複製一個文件,所以沒有文件名衝突的風險。

請幫

+0

不幸的是,正如我在另一個問題中所解釋的,這個例程似乎有效,但它實際上只是沒有失敗。 'for/d'命令將用隨機數替換'%random%',用* nothing *替換'%rand%'。你正在把文件計入'n [t]',但由於'n'沒有設置,'!n!'將被替換爲* nothing *,所以文件名將被分配給'file []'並且將永遠是最後一個所選組的名稱。 'copy'命令將複製'file []' - 始終是同一個文件 - 在目錄中選擇的最後一個文件。當然,它會每次選擇** a **文件,但始終是同一個文件。 – Magoo

+0

謝謝!做了這個改變(@LotPings)也是如此,效果很好 – Amos

回答

0
  • 由於擴展不同,你將不得不提取它們或將它們存儲seperately。
  • 這批店他們太多:

@echo off 
setlocal EnableDelayedExpansion 
Set "Base=C:\Test" 
Set "Dest=Q:\Test\2017-04\24" 
Cd /D "%Base%" 
set t=0 
for /d %%i in (*) do (
    cd "%%i" 
    set /A "n=0" 
    for %%f in (*.jpeg *.jpg *.gif *.bmp *.png) do (
     set /A "n+=1" 
     set "file[!n!]=%%f" 
     set "ext[!n!]=%%~xf" 
    ) 
    If !n! gtr 0 (
     set /A "rand=(!n!*!random!)/32768+1" 
     Call Set "file=%%file[!rand!]%%" 
     Call Set "ext=%%ext[!rand!]%%" 
     Echo rand=!rand! n=!n! copy "!file!" "%Dest%\%%~ni!ext!" 
     copy "!file!" "%Dest%\%%~ni!ext!" >Nul 2>&1 
    ) 
    cd.. 
) 

編輯需要使用隨機的!和呼叫集

+0

如果我爲每個文件分機單獨運行腳本,該怎麼辦? (刪除所有,但是說* .jpeg),它將如何看起來像? – Amos

+0

當前處理的文件夾路徑在'%% i'中,'%%〜ni'只佔最後一個。有一個固定的擴展名,文件名是'%%〜ni.jpg' – LotPings

+0

由於外部循環,有一些缺陷。 (必須使用!隨機!) – LotPings

相關問題