【问题标题】:Batch file copying from multiple directories with same file names从具有相同文件名的多个目录中批量复制文件
【发布时间】:2018-09-11 09:51:04
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 阅读 set /? 以了解如何使用 set /a 保留计数变量
  • 你尝试了什么,你卡在哪里了?

标签: windows batch-file cmd


【解决方案1】:

这里有一些东西可以帮助您实现这一目标。我们测试该文件是否存在于目标中,如果存在,则将其重命名为附加 (+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"

【讨论】:

  • 感谢 Gerhard,那太好了。
猜你喜欢
  • 1970-01-01
  • 2021-12-05
  • 2016-07-22
  • 2012-09-29
  • 1970-01-01
  • 2016-07-12
  • 2016-12-03
  • 2018-03-13
  • 1970-01-01
相关资源
最近更新 更多