批处理脚本:重命名复制的文件以匹配原始文件夹

时间:2017-04-24 13:35:27

标签: batch-file

我正在使用此代码将父文件夹(E:\“新文件夹”)中每个子文件夹中的一个随机文件复制到新的目标文件夹(E:\ samples \“New folder”)[it效果很好]:

@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“等等。

每个子文件夹只复制一个文件,因此不存在文件夹冲突的风险。

请帮忙

1 个答案:

答案 0 :(得分:0)

  • 由于扩展程序不同,您必须单独提取或存储它们。
  • 这个批次也存储它们:
@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..
)

修改需要使用!随机!和通话集

相关问题