首页 > 解决方案 > 从具有相同文件名的多个目录中批量复制文件

问题描述

我正在使用批处理文件从一个目录复制 .gml 文件。

我的问题是它们都在子目录中并且都称为相同的名称。

到目前为止,我所拥有的是:

FOR /r C:\Users\%USERNAME%\Downloads %%f in (*.gml) do copy %%~f C:\Users\%USERNAME%\Desktop\Inspire_Index_polygons\

这会复制文件但会覆盖现有文件,因此我可以看到批处理文件正在工作,因为文件的大小会发生变化,因为每次都会被覆盖。

有没有一种方法可以复制 .gml 文件并使用重复的 +1 重命名复制的文件,这样复制时名称总是不同的。

标签: windowsbatch-filecmd

解决方案


这里有一些可以帮助您实现这一目标的东西。我们测试文件是否存在于目标中,如果存在,则将其重命名为附加 (+1)。

@echo off
setlocal enabledelayedexpansion
set "source=C:\Users\%USERNAME%\Downloads\"
set "dest=C:\Users\%USERNAME%\Desktop\Inspire_Index_polygons\"
set /a cnt=0
for /f "tokens=*" %%a in ('dir /S /B /A-D "%source%*.gml"') do for /f "tokens=*" %%b in ('dir /B "%%a"') do if exist "%dest%\%%b" (
        set "ext=%%~xa"
        set "fname=%%~na"
        if exist "%dest%\!fname!(!cnt!)!ext!" (set /a cnt=!cnt!+1)
        set /a cnt=!cnt!+1
        move "%%a" "%dest%\!fname!(!cnt!)!ext!"
) else move "%%a" "%dest%\%%b"

推荐阅读